diff --git a/pdf/attack_pattern.pdf b/pdf/attack_pattern.pdf index d862af0..fd7e72f 100644 Binary files a/pdf/attack_pattern.pdf and b/pdf/attack_pattern.pdf differ diff --git a/pdf/backdoor.pdf b/pdf/backdoor.pdf index cca0ec0..cd31341 100644 Binary files a/pdf/backdoor.pdf and b/pdf/backdoor.pdf differ diff --git a/pdf/botnet.pdf b/pdf/botnet.pdf index 0eb33bb..2b2fe97 100644 Binary files a/pdf/botnet.pdf and b/pdf/botnet.pdf differ diff --git a/pdf/campaign.pdf b/pdf/campaign.pdf index fdd1342..d7fb855 100644 Binary files a/pdf/campaign.pdf and b/pdf/campaign.pdf differ diff --git a/pdf/galaxy.pdf b/pdf/galaxy.pdf index d64b2bd..730dbec 100644 Binary files a/pdf/galaxy.pdf and b/pdf/galaxy.pdf differ diff --git a/pdf/identity.pdf b/pdf/identity.pdf index 4bed554..7f2d101 100644 Binary files a/pdf/identity.pdf and b/pdf/identity.pdf differ diff --git a/pdf/intrusionset.pdf b/pdf/intrusionset.pdf index 29fc64f..b25011e 100644 Binary files a/pdf/intrusionset.pdf and b/pdf/intrusionset.pdf differ diff --git a/pdf/malware.pdf b/pdf/malware.pdf index c231e0d..389c589 100644 Binary files a/pdf/malware.pdf and b/pdf/malware.pdf differ diff --git a/pdf/observed data.pdf b/pdf/observed data.pdf index 549b112..9354dbd 100644 Binary files a/pdf/observed data.pdf and b/pdf/observed data.pdf differ diff --git a/pdf/ransomware.pdf b/pdf/ransomware.pdf index d3b6b60..10f318a 100644 Binary files a/pdf/ransomware.pdf and b/pdf/ransomware.pdf differ diff --git a/pdf/source.pdf b/pdf/source.pdf index c9b51a6..d38acdc 100644 Binary files a/pdf/source.pdf and b/pdf/source.pdf differ diff --git a/pdf/taxonomy.pdf b/pdf/taxonomy.pdf index dea9ccb..252876d 100644 Binary files a/pdf/taxonomy.pdf and b/pdf/taxonomy.pdf differ diff --git a/pdf/threat_actor.pdf b/pdf/threat_actor.pdf index 7427674..8cebefb 100644 Binary files a/pdf/threat_actor.pdf and b/pdf/threat_actor.pdf differ diff --git a/pdf/tool.pdf b/pdf/tool.pdf index 4c6c841..305f233 100644 Binary files a/pdf/tool.pdf and b/pdf/tool.pdf differ diff --git a/pdf/victim.pdf b/pdf/victim.pdf index 797e39b..7b5b9c8 100644 Binary files a/pdf/victim.pdf and b/pdf/victim.pdf differ diff --git a/tools/convert.sh b/tools/convert.sh index f6338b3..c699688 100644 --- a/tools/convert.sh +++ b/tools/convert.sh @@ -10,8 +10,9 @@ createsvg() { output_pdf=$(echo "$pdf" | sed 's/...//' | sed 's/\.ai/.pdf/') echo "Convert AI to SVG $output ..." inkscape --export-text-to-path -f "$d" -l "../$output" - echo "Convert AI to PDF $output_pdf ..." - inkscape --export-text-to-path -f "$d" -A "../$output_pdf" + # PDF export is handled by Illustrator export as Inkscape does not recognize the two artboards/pages in CLI mode + # echo "Convert AI to PDF $output_pdf ..." + # inkscape --export-text-to-path -f "$d" -A "../$output_pdf" done } diff --git a/tools/export_icons.js b/tools/export_icons.js index 3a753b6..14d4307 100644 --- a/tools/export_icons.js +++ b/tools/export_icons.js @@ -31,14 +31,17 @@ if ( sourceFolder != null ) var fileName = sourceDoc.name; var targetFileBase = fileName.split('.').slice(0, -1).join('.'); // export all sizes as square - //hideLayer('color'); - //showLayer('background'); - //alert(" Processing " + targetFileBase); + setActiveArtboardByName('square', sourceDoc); // choose the right artboard exportPNGFiles('square', sourceDoc, targetFileBase); + // FIXME exportSVGFile('square', sourceDoc, targetFileBase); + // export all sizes as simple - //hideLayer('background'); - //showLayer('color'); + setActiveArtboardByName('simple', sourceDoc); // choose the right artboard exportPNGFiles('simple', sourceDoc, targetFileBase); + // FIXME exportSVGFile('simple', sourceDoc, targetFileBase); + + // PDF export has each artboard in a separate page + exportPDFFile(sourceDoc, targetFileBase); // close without saving sourceDoc.close(SaveOptions.DONOTSAVECHANGES); } @@ -61,18 +64,65 @@ function setActiveArtboardByName(artboardName, sourceDoc) { function exportPNGFiles(targetType, sourceDoc, targetFileBase) { var targetFileExt = 'png'; - setActiveArtboardByName(targetType, sourceDoc); // choose the right artboard for ( i = 0; i < pngSizes.length; i++) { - targetFileSize = pngSizes[i]; - var targetFolder = targetBasePath + '/' + targetType + '_' + targetFileExt + '/' + targetFileSize; + targetSize = pngSizes[i]; + var targetFolder = targetBasePath + '/' + targetType + '_' + targetFileExt + '/' + targetSize; new Folder(targetFolder).create(); var targetFullFilename = targetFolder + '/' + targetFileBase + '.' + targetFileExt; var targetFile = new File(targetFullFilename); - sourceDoc.exportFile(targetFile, ExportType.PNG24, getPNGOptions(targetFileSize, sourceDoc)); + var artboardRect = sourceDoc.artboards[sourceDoc.artboards.getActiveArtboardIndex()].artboardRect; + var artboardSize = artboardRect[2] - artboardRect[0]; + + var exportOpts = new ExportOptionsPNG24(); + exportOpts.antiAliasing = true; + exportOpts.artBoardClipping = true; + exportOpts.saveAsHTML = false; + exportOpts.transparency = true; + exportOpts.horizontalScale = 100.0/artboardSize*targetSize; + exportOpts.verticalScale = 100.0/artboardSize*targetSize; + sourceDoc.exportFile(targetFile, ExportType.PNG24, exportOpts); } } +function exportSVGFile(targetType, sourceDoc, targetFileBase) { + // This code is not good + // See https://graphicdesign.stackexchange.com/questions/39505/illustrator-exporting-svg-viewbox-doesnt-match-artboard-size + var targetFileExt = 'svg'; + var targetFolder = targetBasePath + '/' + targetType + '_' + targetFileExt; + new Folder(targetFolder).create(); + var targetFullFilename = targetFolder + '/' + targetFileBase + '.' + targetFileExt; + var targetFile = new File(targetFullFilename); + + var exportOpts = new ExportOptionsSVG(); + exportOpts.preserveEditability = true; + exportOpts.embedAllFonts = true; + exportOpts.embedRasterImages = true; + exportOpts.fontType = SVGFontType.SVGFONT; + exportOpts.fontSubsetting = SVGFontSubsetting.GLYPHSUSED; + exportOpts.documentEncoding = SVGDocumentEncoding.UTF8; + sourceDoc.exportFile(targetFile, ExportType.SVG, exportOpts); +} + +function exportPDFFile(sourceDoc, targetFileBase) { + var targetFileExt = 'pdf'; + var targetFolder = targetBasePath + '/' + targetFileExt; + new Folder(targetFolder).create(); + var targetFullFilename = targetFolder + '/' + targetFileBase + '.' + targetFileExt; + var targetFile = new File(targetFullFilename); + + var exportOpts = new PDFSaveOptions(); + exportOpts.preserveEditability = true; + exportOpts.compatibility = PDFCompatibility.ACROBAT8; + var flattenerOpts = new PrintFlattenerOptions(); + flattenerOpts.clipComplexRegions = true; + flattenerOpts.convertTextToOutlines = true; + + exportOpts.flattenerOptions = flattenerOpts; + sourceDoc.saveAs(targetFile, exportOpts); +} + + function hideLayer(layerName, sourceDoc) { sourceDoc.layers.getByName(layerName).visible = false; } @@ -80,18 +130,3 @@ function hideLayer(layerName, sourceDoc) { function showLayer(layerName, sourceDoc) { sourceDoc.layers.getByName(layerName).visible = true; } - -function getPNGOptions(size, sourceDoc) { - var artboardRect = sourceDoc.artboards[sourceDoc.artboards.getActiveArtboardIndex()].artboardRect; - var artboardSize = artboardRect[2] - artboardRect[0]; - var pngExportOpts = new ExportOptionsPNG24(); - pngExportOpts.antiAliasing = true; - pngExportOpts.artBoardClipping = true; - // pngExportOpts.matte = true; - // pngExportOpts.matteColor = 0, 0, 0; - pngExportOpts.saveAsHTML = false; - pngExportOpts.transparency = true; - pngExportOpts.horizontalScale = 100.0/artboardSize*size; - pngExportOpts.verticalScale = 100.0/artboardSize*size; - return pngExportOpts; -} \ No newline at end of file