{"id":18974498,"url":"https://github.com/m7a/lp-vector-workflow","last_synced_at":"2026-01-27T11:01:49.267Z","repository":{"id":219640800,"uuid":"749530655","full_name":"m7a/lp-vector-workflow","owner":"m7a","description":"Vector Workflow - Avoiding unnecessary Bitmaps in Graphics Handling","archived":false,"fork":false,"pushed_at":"2024-04-28T20:00:32.000Z","size":320,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-02T13:17:02.959Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/m7a.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-01-28T20:48:59.000Z","updated_at":"2024-04-28T20:00:35.000Z","dependencies_parsed_at":"2025-05-26T04:48:09.628Z","dependency_job_id":null,"html_url":"https://github.com/m7a/lp-vector-workflow","commit_stats":null,"previous_names":["m7a/lp-vector-workflow"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/m7a/lp-vector-workflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Flp-vector-workflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Flp-vector-workflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Flp-vector-workflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Flp-vector-workflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m7a","download_url":"https://codeload.github.com/m7a/lp-vector-workflow/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Flp-vector-workflow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28812367,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T07:41:26.337Z","status":"ssl_error","status_checked_at":"2026-01-27T07:41:08.776Z","response_time":168,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T15:15:14.092Z","updated_at":"2026-01-27T11:01:49.249Z","avatar_url":"https://github.com/m7a.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\nsection: 37\nx-masysma-name: vector_workflow\ntitle: Vector Workflow - Avoiding unnecessary Bitmaps in Graphics Handling\ndate: 2022/01/23 19:12:51\nlang: en-US\nauthor: [\"Linux-Fan, Ma_Sys.ma (info@masysma.net)\"]\nkeywords: [\"kb\", \"vector\", \"workflow\", \"inkscape\", \"pdf\", \"svg\"]\nx-masysma-version: 1.0.0\nx-masysma-website: https://masysma.lima-city.de/37/vector_workflow.xhtml\nx-masysma-repository: https://www.github.com/m7a/lp-vector-workflow\nx-masysma-owned: 1\nx-masysma-copyright: (c) 2022--2024 Ma_Sys.ma \u003cinfo@masysma.net\u003e.\n---\nIntroduction\n============\n\nWhen using computers, graphics and texts of all sorts can be processed. It is\nalso possible to re-use existing graphics and texts by means of\ncopying/embedding them to/within another application.\n\nText can often be copied losslessly as-is. When graphics or special data formats\nare involved, there is usually no _simple_ means of embedding such material\ninto other contexts.\n\nHence, there are _export_ functions to create more common formats out of less\ncommon ones often at the expense of not being properly editable anymore.\nAs a last resort, there is always a _screenshot_ capability that collects the\npixels as displayed on the monitor into an image file that can then be embedded\ninto other contexts such as documents or websites.\n\nOne of the problems with screenshots and many other export mechanisms is that\nthey result in a pixel-based representation (bitmap) that cannot be scaled\nfreely anymore. This can lead to the resulting documents looking blurry or\notherwise wrongly.\n\nTo solve some of these issues, there are _vector graphics formats_ which retain\nthe information about which shapes a graphic consists of. This allows graphics\nto be scaled as needed and preserves a non-blurry display.\n\nUnlike pixel-based bitmaps, the tools for processing vector graphics are known\nless.\n\nThere is also an inherent issue in that there is more ambiguity in handling\nshapes rather than pixels. A pixel with a color is (except for color profiles)\nclearly defined. The interpretation of shapes (or even worse: texts) is,\nhowever, open to some interpretation: Which shapes are in front of others? How\nis a specified unit of measure represented on screen or paper? Etc.\n\nAlso, the complexity of vector graphics is unrelated to the image's actual size\nbecause more shapes on a small space are more complex than fewer shapes even if\nthey occupy a larger drawing area.\n\nDue to these peculiarities, it can sometimes help to do _identity\ntransformations_ between vector graphics: Exporting them to different formats\nmay change how exactly the shapes are specified and may improve or impede\nrendering in target programs.\n\nAbstract\n========\n\nThis article aims at collecting some techniques for processing\n_vector graphics formats_ of various sorts and origins. It is focused at\nmaking use of existing graphics but references a few applications to create\nentirely new ones from scratch, too.\n\nRecommended Formats\n===================\n\nThere are quite a few vector graphics formats out there. Some are not called\nthat but may serve the same purpose.\n\nThe following formats are recommended for general use:\n\n * SVG -- Scalable Vector Graphics\n * PDF -- Portable Document Format\n\nConversion between these formats is possible. One cannot generically recommend\none over the other -- it depends on what works better with the target\napplication.\n\nFor preserving the exact rendering of a file over time, PDF might be a slightly\nbetter choice. If the graphics are to be edited after stored in the respective\nformat, SVG is often easier to handle.\n\nBoth, SVG and PDF are capable of embedding bitmap graphics. The file format\nalone is thus not a safe indicator for the image being a vector graphic!\n\nSometimes, neither SVG nor PDF are available. In these cases, the following\nalternatives should be considered:\n\n * HTML -- Hypertext Markup Language. This is the format used by webpages and\n   it can be rendered to PDF and on many platforms. A HTML export may be a good\n   starting point for further processing.\n * PS -- Post Script. Nowadays mostly superseded by PDF, a PS file can be\n   converted to PDF very nicely and is hence also a viable format.\n * WMF -- Windows Metafile. This is the format to export to for embedding\n   graphics in Microsoft Office applications. Stay away from EMF and WMF for\n   other purposes.\n * XPS -- “Open XML Paper Specification” is a rather rarely seen vector graphics\n   format that can be created on Windows systems. It is recommended to export\n   XPS to PDF whenever possible, because that is easier to work with across\n   multiple platforms.\n\nNote that while SVG and PDF are the recommended vector graphics formats, when\ncreating any new content, you should always keep a copy in the original\nformat because this is the only variant that can be edited truly losslessly.\n\nTo Convert between Formats\n==========================\n\nInkscape is a very versatile vector graphics handling tool which is also potent\nfor creating new graphics. It can natively edit SVG files and provides a\ncairo-based as well as an own PDF import mechanism. Although it seems\ncounter-intuitive, the _Cairo-based Import_ often seems to work better.\n\n## PDF to SVG\n\nThere are multiple ways to convert from an `INPUT.pdf` to an `OUTPUT.svg`:\n\n\tinkscape               -o OUTPUT.svg INPUT.pdf\n\tinkscape --pdf-poppler -o OUTPUT.svg INPUT.pdf\n\tpdf2svg INPUT.pdf OUTPUT.svg # uses cairo/poppler backend, too!\n\n## Other Input File to SVG\n\nMany programs have a native SVG export capability. Whenever this is available,\nit is preferred. For graphics, the SVG export often offers the advantage of not\nincluding any unnecessary whitespace.\n\nFor all file type supported by Inkscape, it is often a good choice:\n\n\tinkscape -o OUTPUT.svg INPUTFILE\n\nFor XPS files, there is `xpstosvg`. Better results can sometimes be achieved by\nprinting XPS files to PDF under Windows and afterwards converting to SVG.\n\n\txpstosvg INPUT.xps OUTPUT.svg # package libgxps-utils\n\n## SVG to PDF\n\n\tinkscape -o OUTPUT.pdf INPUT.svg\n\trsvg-convert -f pdf INPUT.svg -o OUTPUT.pdf # package librsvg2-bin\n\nYou can also render SVG to PDF using web browsers.\nIn Firefox and Chromium you can either use the native print function or\n“Print using the system dialog” for potentially different output PDFs.\n\nNote that all web browsers will add whitespace and possibly other noise like\npage headers/footers, date of printing etc. This makes this technique less\nconvenient than the commands suggested above.\n\n## Text to PDF\n\nRecall from the introduction: _Text can often be copied losslessly as-is_.\n\nInterestingly, while this is true, it is surprisingly difficult to render\nASCII art i.e. text documents that represent a graphic by arranging characters\nsuch that they produce an image.\n\nVarious semi-manual approaches can be taken for this purpose:\n\n * Open text file in a text editor and use the print capability. This often\n   fails due to page boundaries not being large enough. Also, text editors\n   tend to include clutter like line and page numbers which are possibly not\n   wanted for this use case.\n * Copy the text into a word processor (Libreoffice Writer, MS Word or similar).\n   This works but requires selecting a suitable font and configuring the page\n   size. One then either needs to store the document with the correct settings\n   or repeat the process for the next export.\n * Create a HTML page and render it. This process can actually be automated. See\n   script `ascii2pdf.sh` in the repository associated to this page.\n\n## Other Input File to PDF\n\nWhen a PDF export is available from a program, it is a good choice. PDF exports\nare often print-oriented. Hence, exported graphics often have additional\nwhitespace to make them fit to printable page formats.\n\nAlternatively, _Print dialogs_ are often a means of exporting to PDF. Major\nweb browsers have this capability. Java programs often offer a print to PS\nwhich can later be converted to PDF (see above).\n\nFor all file types supported by Inkscape, it can be instantiated for this\npurpose:\n\n\tinkscape -o OUTPUT.pdf INPUTFILE\n\nFor HTML files, it is possible to use Web Browser's print capability or\nalternatively the following command-line tool:\n\n\twkhtmltopdf INPUT.html OUTPUT.pdf\n\nFor PS files, Ghostscript is often a good alternative to Inkscape:\n\n\tps2pdf INPUT.ps OUTPUT.pdf # package ghostscript\n\nFor XPS files, there is also an utility:\n\n\txpstopdf INPUT.xps OUTPUT.pdf # package libgxps-utils\n\n## Input File to WMF\n\nRecommended format for embedding into Microsoft Office Documents.\n\n\tinkscape               -o OUTPUT.wmf INPUT.svg # if INPUT is SVG\n\tinkscape --pdf-poppler -o OUTPUT.wmf INPUT.pdf # if INPUT is PDF\n\tinkscape               -o OUTPUT.wmf INPUT.pdf # if INPUT is PDF\n\n## Other Formats for Vector Graphics in Microsoft Office Documents\n\nMS Office supports two other vector formats besides WMF: EMF and EPS.\n\nWhile EMF often works worse than WMF (although it is _enhanced_ meta file?), the\nEPS capability _can_ be a viable choice under very specific circumstances. It\nrequires a registry hack to work:\n\u003chttps://support.microsoft.com/en-us/topic/security-settings-for-graphic-filters-for-microsoft-office-365-microsoft-office-2016-microsoft-office-2013-microsoft-office-2010-and-the-2007-microsoft-office-system-8b690e9c-b309-c0ff-1949-e28d04be4c19\u003e\n\nThen, one can use EPS files (which can be converted from PS) inside MS Office\ndocuments.\n\nConversion for EPS (rarely useful for other purposes) can be done with inkscape\nor Ghostscript:\n\n\tinkscape -o OUTPUT.eps INPUTFILE\n\tps2eps INPUT.ps OUTPUT.eps # package ps2eps\n\nTo perform Identity Transformations\n===================================\n\nAn identity transformation takes one input and produces the same output format.\nAs explained under _Introduction_, not all vector graphics representations are\nequal. Hence, an identity transformation can still produce varying outputs.\n\nThe following ways have been found to sometimes be effective (substitute `-\u003e` by\none of the conversion steps from before):\n\n\tSVG -\u003e PDF -\u003e SVG\n\tPDF -\u003e SVG -\u003e PDF\n\tPDF -\u003e PS -\u003e PDF\n\tSVG -\u003e PS -\u003e PDF -\u003e SVG # usually not a good idea\n\nThe very versatile `gs` (Ghostscript) command can be used as a direct identity\ntransformation without intermediate conversion into a different format. It still\nproduces an output different from the input file.\n\nThe script `pdf_reduce_gs.sh` (provided in the repository) makes use of a `gs`\ncommand to attempt to reduce the original file size as follows:\n\n\tgs -dBATCH -dNOPAUSE -dNOCACHE -sProcessColorModel=DeviceRGB \\\n\t\t-dNOOUTERSAVE -sOutputFile=OUTPUT.pdf -dPDFSETTINGS=/prepress \\\n\t\t-dMonoImageResolution=600 -r150 -dSAFER \\\n\t\t-dMaxInlineImageSize=16384 -dDetectDuplicateImages \\\n\t\t-sDEVICE=pdfwrite INPUT.pdf\n\nVariations of this command with fewer arguments may also work, e.g. try:\n\n\tgs -dBATCH -dNOPAUSE -dNOCACHE -dNOOUTERSAVE -sOutputFile=OUTPUT.pdf \\\n\t\t-dSAFER -sDEVICE=pdfwrite INPUT.pdf\n\nThere is also a tool called `svgcleaner` for an SVG -\u003e SVG identity\ntransformation. I have not tried it out yet, but it can be found here:\n\u003chttps://github.com/RazrFalcon/svgcleaner\u003e.\n\nTo Reassemble existing Graphics\n===============================\n\nThis section collects various means of re-using existing graphics in a range\nfrom simple operations like rotation to complex operations like creating a\nTable of Contents.\n\n## Cropping, Rotating, Concatenating, Splitting\n\nFor many automated processing tasks, PDF inputs work best. The following tools\ncan be used entirely from the command-line: `pdfcrop`, `pdfjam` and `pdftk`.\n\nTo cut off whitespace from a PDF, use `pdfcrop` to produce file `FILE-crop.pdf`:\n\n\tpdfcrop FILE.pdf                # package texlive-extra-utils\n\nIn case you need to cut out part of a PDF (and not simply the whitespace\naround the page), there are two interactive GUI tools for this:\n\n * `gpdfx-ng`. Homepage: \u003chttps://github.com/yishilin14/gpdfx-ng\u003e,\n   Compilation Instructions: \u003chttps://github.com/m7a/bp-gpdfx\u003e\n * `pdfscissors`. See \u003chttps://github.com/abdullah-mazed/pdfscissors\u003e.\n\nI often use `gpdfx-ng` and very rarely `pdfscissors` because the programs behave\na little differently:\n\n * `gpdfx` extracts data only from a single page and automatically crops it\n   with `pdfcrop`.\n * `pdfscissors` always operates on all pages and does not reduce the actual\n   data size of the PDF. You should thus not include its output directly into\n   e.g. a LaTeX document because that will cause an unnecessary amount of data\n   to be stored. Also, it is possible for interested persons to recover the\n   original (uncropped) document.\n\nTo rotate a PDF, use `pdftk` or `pdfjam`\n\n\tpdftk IN.pdf rotate -east output OUT.pdf  # package pdftk\n\tpdfjam --angle 270 -o OUT.pdf IN.pdf      # package texlive-extra-utils\n\nThese two commands are not exactly equal: `pdftk` does not add whitespace\nwhereas `pdfjam` always outputs a page of a configurable _paper size_ in a\nconfigurable orientation, e.g. to use A4 and landscape mode, amend the call\nas follows:\n\n\tpdfjam --angle 270 -o OUT.pdf --paper a4paper --landscape IN.pdf\n\nAlso, while `pdfjam` syntax is rather intuitive with position independent long\nand short options, `pdftk` is arcane: In the depicted call, the position of\narguments is mandatory, as is the keyword `output`. Notation `-east` is not just\n“parameter east”, but rather “the entire page range” (`-`) concatenated with the\ndirection to rotate (`east`).\n\nTo concatenate PDFs, the tools can be used as follows:\n\n\tpdfjam -o OUT.pdf IN1.pdf IN2.pdf\n\tpdfjam -o OUT.pdf IN1.pdf 1-2 IN2.pdf 4,9\n\tpdftk IN1.pdf IN2.pdf cat output OUT.pdf\n\tpdftk A=IN1.pdf B=IN2.pdf cat A1-2 B4,9 output OUT.pdf\n\nThe commands can be explained as follows:\n\n * Notation `1-2` indicates a page range (from page 1 to page 2 both inclusive)\n * Notation `4,9` indicates a list of pages (include page 4 and 9 only)\n * The `pdftk` syntax with `A=` and `B=` assigns these letters to the input\n   files and allows them to be combined arbitrarily after the `cat`. It is\n   also possible to repeat input files by e.g. specifying `A1-2` multiple times\n   there.\n\nHere, too, `pdftk` retains the input's paper formats allowing the concatenation\nof small and large pages into a single document. While this can be hard for\nPDF readers to process properly it _is_ useful for including large drawings\ninto regular documents.\n\nSplitting PDFs with `pdfjam` works as follows:\n\n\tpdfjam -o OUT1.pdf IN.pdf 1\n\tpdfjam -o OUT2.pdf IN.pdf 2\n\nI.e. by selecting each page once and creating a different output file for each\nchoice, one can split a PDF into one PDF for each page. This is a little\ntedious, though. `pdftk` can do this automatically and in a single call:\n\n\tpdftk IN.pdf burst\n\nThis will create `pg_0001.pdf`, `pg_0002.pdf` and so on for each of the input\ndocument's pages and unlike the `pdfjam` approach suggested above it will retain\nthe paper sizes from the original document.\n\nBoth, `pdfjam` and `pdftk` are very versatile. The following two subsections\ndetail some special features of these tools.\n\n## Advanced use of `pdfjam`: Nup and Scale Operations\n\n`pdfjam` can be used to place multiple pages on one using the `--nup NxM`\noption. Here,\n\n * `N` is the horizontal number of pages to put beside each other and\n * `M` is the vertical number of pages to put above each other\n\nA typical means to place four slides of a presentation on one page for a\nprintout may be using a command like the following:\n\n\tpdfjam -o print.pdf --nup 2x2 --landscape presentation.pdf\n\nIt is important to add the `--landscape` parameter here because otherwise the\n(typically landscape) slides would be allocated a portrait-format slot on the\n2x2 grid that would not be used to its full extent.\n\nAnother option worth noting is the `--scale` option: It scales the inputs\nby the given factor before assembling them for the output. You can scale down\na page to 90% as follows:\n\n\tpdfjam -o OUT.pdf --scale 0.9 --paper a4paper IN.pdf\n\n`--scale` can be combined with `--nup` to achieve print layouts that have enough\nwhitespace for being printed on typical non-borderless office printers. For that\npurpose, scales between 0.95 and 0.98 tend to work well.\n\nA command with 0.95 scaling and 2x2 slides on a page could be as follows:\n\n\tpdfjam -o print.pdf --scale 0.95 --nup 2x2 --landscape presentation.pdf\n\nNote that this not only adds space at the output page border but also between\nthe slides on the page. If the space between the slides is unwanted, perform\na two-pass operation as follows:\n\n\tpdfjam -o tmp.pdf --nup 2x2 --landscape presentation.pdf\n\tpdfjam -o print.pdf --scale 0.95 --landscape tmp.pdf\n\nThis way, whitespace will only be added to the edges of the actual printed\npage, and not between the slides. Of course, by adding a `--scale` option to\nthe first operation, too, you can fine-tune the space between slides and to the\nborder of the paper.\n\n## Advanced use of `pdftk`: Shuffle, Remove XMP and Stamp Operations\n\n`shuffle`\n:   Shuffle assembles a single PDF from multiple inputs by taking all first\n    pages, then all second pages, then all third pages etc. after each other.\n    Say, you have a PDF with all “left-hand” pages and another PDF with all\n    “right-hand” pages. Then you can use this feature to bring them back in\n    order.\n\n`drop_xmp`\n:   This can be used to remove metadata. XMP metadata may reveal sensitive\n    information such as the user name of the person who exported the document\n    or the actual software version in use for the export.\n\n`stamp` / `background`\n:   This can be used to overlay/underlay a specific PDF above/below an existent\n    one. This feature is nice for adding page numbers to documents which\n    otherwise don't have them or to add a common logo onto all of the pages.\n\n### Example Script for Background Stamping\n\nThis shows the interaction of burst/background/output to edit all pages of a\nPDF individually and add a background (taken from `fglayer.pdf`) to all pages\ntaken from `merged.pdf` producing the output file `merged2.pdf`.\n\n~~~{.bash}\n# Split into multiple files with prefix by number\npdftk fglayer.pdf burst output split_intermediate/%04d.pdf\npdftk merged.pdf  burst output split_intermediate/%04d_bg.pdf\n# Process Add `bg` to `fglayer` PDFs and produce result pdfs (`_rs`)\nfor i in split_intermediate/????.pdf; do \\\n\tfn=\"$(echo \"$i\" | cut -d. -f 1 | cut -d/ -f 2)\"\n\tpdftk \"$i\" background \"split_intermediate/${fn}_bg.pdf\" output \\\n\t\t\t\t\t\"split_intermediate/${fn}_rs.pdf\" \u0026\ndone\nwait\n# Concatenate together result PDFs\npdftk $(echo split_intermediate/????_rs.pdf | sort) output merged2.pdf\n~~~\n\nThis approach works well if e.g. `merged.pdf` is the input and `fglayer.pdf` is\na file consisting solely of info to be stamped onto the data from `merged.pdf`.\n\nSee subdirectory `example_background` for a LaTeX file to produce a\n`fglayer.pdf` file.\n\nThe core of the LaTeX implementation of this approach looks as follows:\n\n~~~{.tex}\n\\begin{document}\n\\let\\cleardoublepage\\relax\n\\newcommand{\\macursec}[0]{}\n\\pagestyle{fancy}\n\\fancypagestyle{plain}{\\pagestyle{fancy}}\n\\setlength{\\fboxsep}{0pt}\n\\newcommand\\mamark{\\hspace{1cm}\\fbox{\\setlength{\\fboxsep}{3pt}%\n\t\\colorbox{white}{\\begin{minipage}[T]{10mm}%\n\t\\includegraphics[height=8mm]{masysmaicon}\\end{minipage}%\n\t\\begin{minipage}[T]{20cm}\\flushleft\n\t{\\macursec{}} | \\textbf{\\thepage}\\end{minipage}}}}\n\\renewcommand{\\headrulewidth}{0pt}\n\\lhead[]{}\n\\chead[]{}\n\\rhead[]{}\n\\lfoot[\\mamark]{\\mamark}\n\\cfoot[]{}\n\\rfoot[]{}\n\\newcommand\\mapart[1]{\\addcontentsline{toc}{section}{#1}%\n\t\\renewcommand{\\macursec}[0]{#1}\\clearpage\\setcounter{page}{1}}\n%-------------------------------------------------------------------------------\n\n\\mapart{Section 1 slides}\n\\multido{}{44}{\\vphantom{x}\\clearpage}\n\n\\mapart{Section 2 slides}\n\\multido{}{44}{\\vphantom{x}\\clearpage}\n\n%-------------------------------------------------------------------------------\n\\end{document}\n~~~\n\n## Creating Large Graphics out of Small Ones\n\nRe-assembling multiple small graphics into a large whole is only an automatic\noperation in the simple cases like considered with the previously described\ncommand: `pdfjam --nup NxM --scale SCALE`. In cases a more fine-grained control\nof the actual composition is needed, a manual approach should be considered.\n\nMultiple tools can be instantiated for the purpose\n\nLibreoffice Draw (SVG -\u003e PDF)\n:   Although “office”-style products are sometimes frowned upon by the experts,\n    LO Draw fully supports arranging images in a free-style fashion. As it can\n    work with SVG files, vector graphics can be processed as inputs and as it\n    can export to PDF, it can retain the vector quality for the actual output\n    composition. LO Draw has been found to very rarely mess with the actual\n    graphics' contents and does not produce overly large PDF outputs. Working\n    interactively with this tool can be slow, though, because rendering\n    performance is a little on the slow side. In this case, it can help to\n    disable the on-the-fly rendering of images: There used to be a checkbox\n    buried in the menus somewhere to do this, but it could not be located in\n    Libreoffice Draw 7.0.4.2 anymore? Finally, the implicit format conversion\n    from SVG to PDF may be problematic for some graphics and use cases.\n\nInkscape (SVG -- SVG)\n:   Inkscape was already mentioned for conversion between formats. It can be\n    used to compose graphics, too. When it works, it gives a greater flexibility\n    and better placement precision compared to LO Draw: When graphics are\n    reasonably coded, they can sometimes even be broken into components using\n    the “ungroup” feature or by preparing the SVG code by hand. This can be\n    used to e.g. remove components from otherwise hard-to-edit PDF graphics.\n    The usual approach when using Inkscape is to _import_ the graphics that are\n    to be composed. While it is often possible to open a given SVG or PDF in\n    Inkscape, it is sometimes hard to _copy_ graphics from one window to the\n    other without heavily distorting the contents. It can help to pre-convert\n    the graphics of interest to SVG or even do some identity transformations\n    _before_ opening the respective graphic in order to have it in a more\n    copy-friendly state. Overall, for complex compositions of graphics from\n    multiple sources, Inkscape is not my first choice.\n\nLaTeX/TikZ (PDF -- PDF)\n:   If the workflow is more pdf-centric and a conversion to SVG should be\n    avoided or if other factors favor the use of a TeX backend, LaTeX can be\n    a viable choice. Using TikZ it becomes possible to place nodes that may\n    themselves contain entire graphics e.g. by using `\\\\includegraphics` inside\n    as a node's content.\n\nHTML (SVG -- PDF)\n:   Under special circumstances it might become sensible to encode the\n    composition of graphics in HTML and export that back into a graphics\n    format like PDF. Although frowned-upon by HTML designers, HTML `\u003ctable\u003e`\n    elements provide for a flexible means of organizing graphics that can be\n    hard to achieve in any of the other programs. HTML cannot include PDF\n    directly, hence inputs should come as SVG files. On the output side, browser\n    print functions and `wkhtmltopdf` produce a PDF. This means a conversion\n    similar to the LO Draw case is included.\n\n## Annotate with Defined Coordinates\n\nSometimes there is an existing graphic which should be drawn into at defined\ncoordinates. Here, _defined coordinates_ refers to the fact that the graphics'\nscale is not only qualitative but that the position of points and lines actually\nrepresents a value.\n\nIn a paper-based workflow it is possible to draw to scale using geometry\ntriangles and other drawing auxiliary tools. In all-digital scenarios where\nthe vector properties should be retained (rather than printing something out\nand scanning it back in), it is a little more complicated.\n\nThere are multiple basic techniques that can be used in such cases:\n\n### With Arbitrary Scales\n\nIn case the original graphic already indicates some scale in form of numbers in\na grid, count the number of divisions. Then create the vector graphic that is\ngoing to be adjusted to the scale with the same number of divisions and scale it\nto fit the predefined grid.\n\nThe same technique can be used when there is a sort of axis labelling by marking\none point on each of the axes at a defined number and then marking the same\npoint in the new graphic to be created (e.g. the one representing the data to be\ndrawn into the graph). Afterwards, the new graphic can be scaled to fit the\ndefined limits by making the common points identical between the two graphics.\n\nUseful tools in this regard are the following:\n\n * Inkscape -- used for scaling and copying tasks\n * Geogebra -- used for plotting graphs. By putting a (potentially bitmap)\n   copy of the target background into Geogebra's coordinate system, one can\n   obtain common points for the purpose\n * Libreoffice Calc -- LO charts can be adjusted in various ways including the\n   possibility to fine-tune the number of units for grids. This can enable the\n   transformation into a common scale, too.\n\n### With Defined Scales\n\nIn case the original graphic indicates a common scale like e.g. 1:50 or\nsuch, it is possible to create the new graphic of interest in the same scale\nand then copy them over each other. This will avoid re-scaling but some\ncommon programs do not support output at defined lengths.\n\nUseful tools for this are the following:\n\n * SVG -- SVG graphics can be specified with actual sizes in millimeters.\n   With careful GUI use, Inkscape can do this to some extent, too.\n * LaTeX+TikZ -- can create graphics to scale, too.\n\n![Example of an SVG image that is specified in millimeters and can be printed to scale](vector_workflow_att/example_201305_netz.svg)\n\n## Add Table of Contents\n\nTo achieve a similar effect to the approach described under _Example Script for\nBackground Stamping_ before, one can also use LaTeX' `includepdf` feature and in\nthe process optionally generate a Table of Contents, too.\n\nIn `example_inclduestamp_toc/includestamp.tex` an example LaTeX code is provided\nfor the purpose. In the example, `empty100.pdf` serves as a substitute for any\nreal PDF document that one would like to annotate using this approach.\n\nAt the core, the code looks as follows:\n\n~~~{.tex}\n\\begin{document}\n\\let\\cleardoublepage\\relax\n\\newcommand{\\macursec}[0]{}\n\\pagestyle{fancy}\n\\fancypagestyle{plain}{\\pagestyle{fancy}}\n\\setlength{\\fboxsep}{0pt}\n\\newcommand\\mamark{\n\t\\begin{tabular}{|p{7cm}p{6.5cm}p{3cm}|}\n\t\\hline\n\t\\cellcolor{white} Some Topic\u0026\n\t\t\\cellcolor{white} \\cmd{info@masysma.net}, 13.08.2021\u0026\n\t\t\\cellcolor{white} Page \\thepage/\\pageref{LastPage}\\\\\n\t\\cellcolor{white} More Info\u0026\n\t\t\\multicolumn{2}{l|}{\\cellcolor{white}\\textbf{\\macursec}}\\\\\n\t\\hline\n\t\\end{tabular}\n}\n\\renewcommand{\\headrulewidth}{0pt}\n\\lhead[\\mamark]{\\mamark}\n\\chead[]{}\n\\rhead[]{}\n\\lfoot[]{}\n\\cfoot[]{}\n\\rfoot[]{}\n\\newcommand\\mapart[1]{\\addcontentsline{toc}{section}{#1}%\n\t\t\t\t\\renewcommand{\\macursec}[0]{#1}\\clearpage}\n\n\\tableofcontents % optional\n\n\\mapart{Long Part Description 1}\n\\includepdf[pagecommand={},pages=1-30]{empty100}\n\n\\mapart{Long Part Description 2}\n\\includepdf[pagecommand={},pages=31-37]{empty100}\n\n\\end{document}\n~~~\n\n### Drawing on the Page Background with TikZ\n\nAbove approach can be combined with TikZ to draw directly on the page or its\nbackground. The following code contains some handy excerpts illustrating the\napproach. There is currently no compilable example in the repository\nabout this technique, though.\n\n~~~{.tex}\n\\usetikzlibrary{backgrounds}\n% ...\n\\begin{document}\n% ...\n\n\\pagestyle{fancy}\n\\fancypagestyle{plain}{\\pagestyle{fancy}}\n\\newcommand\\maextracmds{}\n\\newcommand\\matikzinfobox{\n\t\\node[anchor=north west,xshift=0.5cm,yshift=-0.75cm] at\n\t\t(current page.north west) {%\n\t\t\t\\begin{tabular}{|l|l|}\n\t\t\t\\hline\n\t\t\t\\footnotesize AAAAA \u0026 \\footnotesize \\pagemark \\\\\n\t\t\t\\hline\n\t\t\t\\multicolumn{2}{|c|}{\\scriptsize BBBBB}\\\\\n\t\t\t\\hline\n\t\t\t\\end{tabular}\n\t\t};\n\t\\maextracmds\n}\n\\newcommand\\mamark{\\begin{tikzpicture}[remember picture,overlay]\n\t\\matikzinfobox\n\\end{tikzpicture}}\n\\renewcommand{\\headrulewidth}{0pt}\n\\lhead[\\mamark]{\\mamark}\n\\chead[]{}\n\\rhead[]{}\n\\lfoot[]{}\n\\cfoot[]{}\n\\rfoot[]{}\n\n% ...\n\\includepdfmerge[pagecommand={\\pagestyle{fancy}}]{...pdf file here...}\n\n% ...\n\n\\begin{tikzpicture}[remember picture,overlay]\n\t\\begin{scope}[on background layer]\n\t\t\\node[xshift=5mm,anchor=west] at (current page.west) {\\dots};\n\t\\end{scope}\n\t\\matikzinfobox\n\\end{tikzpicture}\n~~~\n\nTo create new Graphics\n======================\n\nThere are countless applications to create vector graphics. Almost any program\nthat has a _print_ function can be used for the purpose. The following shows\nsome selected tools that have been found to be useful for creating new\nvector graphics.\n\nXournal (package `xournal`)\n:   This program can be used for PDF annotation but can also create\n    standalone/empty documents. It is best for annotation purposes and cases\n    where the actual coordinates and scales of drawing do not matter.\n\n(L)O Suite (package `libreoffice`)\n:   Office suites provide multiple formats of documents that can all be exported\n    to vector graphics. This is not strictly limited to _Libreoffice Draw_,\n    _Calc_ and _Writer_ but also applies to the MS Office variants. Many people\n    seem to be able to create incredibly complex graphics all in _Powerpoint_\n    so that may contain some secret simplicity for entering graphics. I\n    personally do not find any of the office suites to be overly intuitive to\n    use correctly.\n\nDia (package `dia`)\n:   This diagram editor can be used to quickly create flowcharts and other\n    boxes-and-lines-based charts. It also supports a variety of special\n    templates from which specialized diagrams can be created e.g.\n    Entity-Relationship diagrams. While Dia supports UML, entering UML\n    is rather clumsy and has some annoying caveats. It is e.g. impossible to\n    resize a class diagram to an arbitrary size of choice which effectively\n    makes it impossible to achieve an UML layout where parts are all grid-aligned\n    and connected by mostly straight lines in 90° angles. Dia's PDF export\n    creates multiple pages by default and the diagram components are very large\n    by default making small diagrams already span multiple pages. The SVG\n    export works fine, though.\n\nUMLet\n:   This is (by the name) an UML tool but given that it can draw generic\n    rectangles and generic arrows combined with colors and transparency can be\n    used for a lot of charting tasks. It needs some guessing and searching to\n    find out about the syntax of formatting -- some of it is markdown-inspired,\n    e.g. `*bold*`, some other things are UMLet's own way of doing things.\n    Having overcome this hurdles, it is much more efficient to create an UML\n    diagram in UMLet rather than Dia. The default UMLet line thickness and font\n    are sometimes ill-suited for printing them directly. If UMLet is to be used\n    in a print-centric workflow, consider printing out some sample diagrams\n    first and find out what to change for acceptable printing quality -- it may\n    mostly be a matter of font choice and line thickness. UMLet is particularly\n    well-suited in case an efficient combination of text and GUI-based\n    approaches for diagram creation is sought and where the diagrams of\n    interest are UML or generic boxes and lines. Anything that becomes complex\n    (think of gradients, shadows, weird effects) is better done in other\n    applications.\n\nInkscape (package `inkscape`)\n:   This SVG editor provides a lot of flexibility in creating arbitrary\n    vector-based shapes with colors. It excels at tasks where there is a clear\n    mapping to SVG primitives. Inkscape's font handling and object moving and\n    resizing features are less convoluted than other programs'.\n\ndraw.io\n:   Although the name suggests differently, this is neither a drawing-centric\n    nor a webapp-only program. It is a fully-featured diagram drawing tool that\n    conceptually combines Inkscape and Dia elements together with a more\n    intuitive GUI interface. Note that I do not have any first-hand experience\n    with this tool yet, but I consider adding it to my toolbox.\n\nHTML + CSS\n:   Although it seems a little counter-intuitive, HTML + CSS can be quite viable\n    a choice for creating _printed forms_. This is due to the fact that\n    styling and sizing empty HTML tables and `\u003clegend\u003e` elements overall is\n    pretty straight-forward especially if some HTML and CSS2 are already known.\n    It even works to (a relative) scale! After that one can just use the\n    browser's _print_ function to obtain a perfectly styled form. Of course,\n    this is less well-suited for general purpose graphics but similar to\n    LibreOffice Writer or LaTeX can be quite viable for document-like graphics\n    purposes.\n\nLaTeX+TikZ\n:   Although a command-line program with text input may not be the most\n    intuitive choice for creating graphics, LaTeX and TikZ provide a powerful\n    toolbox for creating highly complex graphics with perfect typesetting.\n    TikZ is a powerful diagram framework that exceeds the capabilities of\n    Dia and Inkscape taken together. Its syntax is _arcane_ though. The\n    documentation with over 1300 pages is rather comprehensive and shows a lot\n    of helpful examples (cf. \u003chttps://tikz.dev/\u003e and\n    \u003chttps://ctan.org/pkg/pgf?lang=en\u003e). Unlike other markup languages, TikZ\n    provides primtives (like e.g. draw lines between points and such) and\n    advanced concepts (like e.g. named nodes whose distances may be specified\n    relative to each other up to entire tree structures generated from just\n    specifying the nodes and their nesting. This allows for solving a variety\n    of graphics tasks _if you know how to go about them_. The learning curve\n    is steep and there does not seem to be a defined way to learn it beyond some\n    beginners understanding. Maybe it would help to trying to use TikZ for all\n    one's graphics needs for a defined long period of time, but whenever there\n    is no Stackoverflow entry nor an exactly matching example in the\n    documentation, one can get lost in TikZ world...\n\n## Examples for HTML and CSS based Forms\n\nThis section demonstrates the use of HTML and CSS to design useful vector\ngraphics forms. The following forms are mostly in German but the point is less\nthe content (it may even be incorrect) but more the _form design_ that can be\ncreated with a few HTML and CSS instructions.\n\nThe final graphics was obtained by using Firefox' print function to create the\nPDF.\n\nFile `example_vdstdmod.xhtml` contains a form for organizing a study module.\nBelow pictures show a blank and a filled-out version:\n\n![Example form for structuring the metadata of a study module](vector_workflow_att/example_vdstdmod.svg)\n\n![Example of the filled-out form](vector_workflow_att/madoc007545edited.png)\n\nFile `example_molekuelformular.xhtml` contains a form that was used to train\nfor a chemistry exam in Italy. Again, there is the blank version and a\nfilled-out version. Note that the blank version is v1.1 (a later revision)\nwhereas the filled-out version corresponds to an older design.\n\n![Example form for chemistry exam](vector_workflow_att/example_printv11.svg)\n\n![Example of the filled-out form](vector_workflow_att/madoc001701.png)\n\n## ASCII Art\n\nThe next section explains rendering text-based graphics. There are some\ntools that simplify the creation of such graphics and enhance their versatility.\nThese solutions to vector graphics are definitely a niche. However,\nrestricting graphics to ASCII art limits complexity in an interesting sense that\ncan result in increased quality whenever this forces designers to remove much\nof the extra bells and eye-candy and instead strongly focus on the actual\ncontent and wisely use the limited number of design elements provided by the\nASCII or Unicode charsets.\n\nDitaa and Ditaa2EPS\n:   The underdog among all of the tools presented here: Ditaa is a program that\n    takes ASCII-art graphics and creates bitmaps out of them. The separately\n    downloadable Ditaa2EPS does the same but produces an EPS (i.e. vector)\n    output. Ditaa uses some heuristics (and a specific syntax) to determine\n    the actual output formatting which is intended to allow fine-tuning the\n    output graphic while retaining ASCII readability. The output quality after\n    sending an arbitrary ASCII art graphics to Ditaa can be hit-or-miss but if\n    graphics are designed with Ditaa in mind upfront, it becomes possible to\n    create graphics that are portable from text consoles to presentations or\n    styled text documents and websites.\n\nDrawIt! (`drawit.vim`)\n:   This VIM plugin (\u003chttps://www.vim.org/scripts/script.php?script_id=40\u003e)\n    provides an interesting means to draw ASCII art in the VIM text editor.\n    It is useful in combination with template files for filling specific page\n    layouts as to limit the drawing space to extents that can be reasonably\n    printed on paper. The input method takes some getting used to but is much\n    faster than assembling the ASCII art in a regular text editor especially\n    if large boxes are to be drawn. See [templates(32)](../32/templates.xhtml)\n    for a package that contains empty ASCII art pages for A3 and A4 print\n    sizes. See the online vimhelp for usage instructions:\n    \u003chttp://www.drchip.org/astronaut/vim/doc/DrawIt.txt.html\u003e.\n    Download the plugin from the author's home page here:\n    \u003chttp://www.drchip.org/astronaut/vim/vbafiles/DrawIt.vba.gz\u003e.\n\nTo convert Console Text to Graphics\n===================================\n\nSometimes, it can be beneficial to convert text into graphics. This is\nespecially useful to preserve colors and formatting. Most GUI applications\nsupport “print” operations which can produce a PDF or similar. For console-based\napplications, such options are not always available.\n\n## Using the “print” function of Console Applications\n\nIn `vim`, you can print the document using `:ha \u003e print.ps` which produces a\npostscript document.\n\nAdditionally, `:TOhtml` can be used to generate an HTML representation of the\ncurrently opened file including syntax highlighting. For many printing\npurposes it may make sense to invert the color scheme by setting\n`:set bg=light` first.\n\n## From Terminal To Text\n\nIf anything is displayed in the terminal, it can most often be selected by the\nmouse and copied. Alternatively, it is often possible to redirect programs'\noutput into text files.\n\nWhenever control sequences are contained, this can become difficult. There are\nthen two major options that can be considered:\n\n 1. Tools from package `colorized-logs` can be used to strip ANSI Escape\n    Sequences or convert colorized terminal output to colorized HTML which may\n    enable further processing.\n 2. Terminal multiplexers like `tmux` and `screen` allow selecting a portion\n    of the window contents and pasting them again. To copy the output of a\n    currently running program in `tmux`, follow these steps:\n     * Make sure the output you want to copy is displayed in tmux and the tmux\n       window size matches what you want to be the output width of the text.\n     * Press [CTRL]-[B] then [[] (opening bracket) then jump to the beginning of\n       the area of interest with [H] [J] [K] [L]\n     * Press [V] to enter visual mode.\n     * Select lines with [J]\n     * Press enter once everything of interest is selected.\n     * Enter a command like `cat \u003e /tmp/file.txt`\n     * Press [CTRL]-[B] then []] (closing bracket) to paste the contents\n     * Press [CTRL]-[D] to close input to `/tmp/file.txt`\n     * The plain-text copy of the output should now be in `/tmp/file.txt`.\n\n## Printing ASCII Art\n\nGraphics can not only be created in popular graphics formats such as SVG, PDF\nor PNG but also in form of plain text files as “ASCII art” i.e. graphics made\nof ASCII (or nowadays Unicode) characters. Such graphics are useful in that they\ncan be processed on text-based terminals and embedded into text files of any\nkind e.g. within program source codes. Although they are not vector graphics in\nthe usual sense, they can still be scaled to almost arbitrary sizes by choosing\na larger font size.\n\nProblems with ASCII art occur whenever the output of interest is intended to be\ncolored. There are _ANSI Escape Sequences_ which can be used to colorize the\noutput on a Terminal. There do not seem to be any good ANSI Escape\nSequence-capable ASCII art editors, though.\n\nThis repository provides a small set of scripts to aid in the process of\ncreating colorized ASCII art. The workflow is as follows:\n\n 1. Create monochrome ASCII art in a text file (let's call it `DATA.txt`)\n 2. Copy `DATA.txt` to `STYLE.txt` then make it a _stylesheet_\n 3. Render the colorized version using scripts `ascii2console.awk` or\n    `ascii2pdf.sh`.\n\nThe idea behind a _stylesheet_ here is that it has the same form as the\nactual graphics but characters are not displayed but rather describe the color\nof the text to display.\n\nHere is a simple example.\n\n\tDATA.txt\n\t+---+     +---+\n\t| A +-----+ B |\n\t+---+     +---+\n\tSTYLE.txt\n\t+---+     +---+\n\t|   +rrrrr+   |\n\t+---+     +---+\n\nHere, the `r` characters in the stylesheet advise the scripts to color that part\nof the original graphics in red. I.e. the output could look as follows:\n\n![Data and Style Example for ASCII Art](vector_workflow_att/data_and_style.png)\n\nThe following letters are supported to indicate colors:\n\nLetters  Colors         ANSI         HTML\n-------  -------------  -----------  --------------\ng, G     green          1/32m        00aa00/00cc00\nw, k     white          1;37m/1;30m  777777/ignored\ny, Y     yellow         1/33m        999900/cccc00\np, P     pink, magenta  1/35m        990099/ff00ff\nr, R     red            1/31m        900000/ff0000\nb, B     blue           1/34m        000090/0000ff\nc, C     cyan           1/36m        008080/00aaaa\n\nIn addition to its support for stylesheets, script `ascii2pdf.sh` also supports\nspecifying the output page size and selects a sane font by default (if\ninstalled).\n\nAs an additional feature, `ascii2pdf.sh` supports specifying custom color\nletters and overriding the defaults by processing any lines at the end of the\nstylesheet as CSS code to add to an intermediate XHTML output page.\n\nTo render to Bitmap\n===================\n\nSometimes a vector graphic is available but a bitmap (i.e. pixels) are needed.\nDepending on the source format, there are multiple ways to render vector\ngraphics.\n\n## ImageMagick\n\nThe `convert` program provided by ImageMagick is easy to use on the command\nline:\n\n\tconvert -density 300 INPUT.pdf OUTPUT.png\n\tconvert -density 300 INPUT.svg OUTPUT.png\n\nParameter `-density` specifies the target resolution in DPI. The given example\n(300) may be well suited for a medium to high-quality output. Reduce this\nparameter to reduce output file size at the expense of quality.\n\nDue to security concerns, it may be necessary to enable this feature first, cf:\n\u003chttps://askubuntu.com/questions/1081895/trouble-with-batch-conversion-of-png-to-pdf-using-convert\u003e\n\n## RSVG (convert from SVG)\n\nThe `rsvg-convert` utility can be used for SVG to PDF conversion but also as\na means to render SVG to bitmap:\n\n\trsvg-convert --dpi-x 300 --dpi-y 300 -f png INPUT.svg -o OUTPUT.png\n\nSimilar to the _ImageMagick_ varaint, the intended output resolution can be\nspecified. Check the output of `rsvg-convert --help` for a listing of other\nmeans to specify the output sizes.\n\n## wkhtmltoimage (convert from HTML)\n\n\twkhtmltoimage -f png INPUT.html OUTPUT.png\n\nSimilar to `wkhtmltopdf`, this tool can be used to convert HTML pages to bitmap\nexports. Like the Firefox screenshot function, this allows the conversion of\npages which do not fit the screen and hence cannot be captured in their entirety\nby means of a generic screenshot function.\n\n## GUI Applications\n\nIn addition to above mentioned command-line programs, these are some noteworthy\nGUI programs with bitmap export capabilities:\n\n * Inkscape\n * GIMP\n * Firefox -- This browser is worth noting because it provides a screenshot\n   function that can take screenshots larger than the viewport/screen size and\n   hence be used for many SVG and HTML to bitmap export tasks.\n\nLicense\n=======\n\nThe content of this document and relevant scripts are available under GPLv3 or\nlater. Feel free to contact me if you would like to use them under a different\nlicense.\n\n~~~\nVector Workflow - Avoiding unnecessary Bitmaps in Graphics Handling,\nCopyright (c) 2022--2024 Ma_Sys.ma \u003cinfo@masysma.net\u003e.\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n~~~\n\nConclusion\n==========\n\nIf anything, remember the following tools from this article:\n\n * `gpdfx` -- PDF extraction tool.\n * `rsvg-convert` -- tool to convert SVG to PDF.\n * `pdf2svg` -- tool to convert from PDF to SVG.\n\nFrom the convoluted complexity of all of the vector graphics operations it is\npretty obvious why there are still so many blurred screenshots in place of\nactual vector graphics!\n\nFuture Directions\n=================\n\nThere are some additional tricks worth explaining. Most notably, my peculiar\nLaTeX+Maxima integration is probably worth explaining in a dedicated article.\n\nSee Also\n========\n\n * [programming_fonts(37)](../37/programming_fonts.xhtml) provides some\n   information about useful _Programming Fonts_ that may as well be used for\n   rendering ASCII art.\n * [conf-cli(32)](../32/conf-cli.xhtml) provides script `svg2pdf` as\n   an alias for `rsvg-convert`.\n * [templates(32)](../32/templates.xhtml) provides ASCII art frame templates if\n   to use for cases where it is intended to print the resulting drawing to a\n   defined paper size like A3 or A4.\n * Build instructions for an `mdvl-umlet` package:\n   \u003chttps://github.com/m7a/lp-umlet\u003e\n * Packaging instructions for an `mdvl-pdfscissors` package:\n   \u003chttps://github.com/m7a/bp-pdfscissors\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm7a%2Flp-vector-workflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm7a%2Flp-vector-workflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm7a%2Flp-vector-workflow/lists"}