webentwicklung-frage-antwort-db.com.de

PDF zu SVG konvertieren?

Ich versuche, ein PDF in SVG umzuwandeln. Das von mir verwendete Programm ordnet jedoch derzeit einen Pfad für jeden Buchstaben in jedem Textstück zu, dh, wenn ich den Text in der Quelldatei ändere sieht es hässlich aus.

Ich habe mich gefragt, was der sauberste PDF zu SVG-Konverter ist, hoffentlich einer, der keinen Pfad für Textbereiche hat, die einfach keinen brauchen. Wie wir wissen, PDF und SVG sind sich ziemlich ähnlich, daher gehe ich davon aus, dass es einige gute Konverter gibt.

106
DanRedux

Inkscape wird von vielen Wikipedia-Nutzern verwendet, um PDF zu SVG zu konvertieren.

http://inkscape.org/

Sie haben sogar eine praktische Anleitung dazu!

http://de.wikipedia.org/wiki/Wikipedia:Graphic_Lab/Resources/PDF_conversion_to_SVG#Conversion_with_Inkscape

Sie können Inkscape nur in der Befehlszeile verwenden, ohne eine GUI zu öffnen. Versuche dies:

inkscape \
  --without-gui \
  --file=input.pdf \
  --export-plain-svg=output.svg 

Um eine vollständige Liste aller Befehlszeilenoptionen zu erhalten, führen Sie inkscape --help Aus.

81
Kurt Pfeifle

Ich verwende derzeit PDFBox , das eine gute Unterstützung für die Grafikausgabe bietet. Es gibt eine gute Unterstützung für das Extrahieren der Vektorstriche und auch für das Verwalten von Schriftarten. Es gibt einige gute Tools zum Ausprobieren (z. B. wird PDFReader als Java Graphics2D) angezeigt). Sie können das Grafik-Tool mit einem SVG-Tool wie Batik abfangen (ich mache das und es gibt eine gute Aufnahme).

Es gibt keine einfache Möglichkeit, alle Dateien PDF nach SVG zu konvertieren - dies hängt von der Strategie und den Tools ab, mit denen die PDF-Dateien erstellt wurden. Einige Texte werden in Vektoren konvertiert und können nicht einfach rekonstruiert werden. Sie müssen installieren Vektor-Schriftarten und suchen Sie nach ihnen.

UPDATE: Ich habe dies nun zu einem Paket PDF2SVG entwickelt, das Batik nicht mehr verwendet:

das auf einer Reihe von PDFs getestet wurde. Es erzeugt eine SVG-Ausgabe bestehend aus

  • zeichen als ein <svg:text> pro Zeichen
  • pfade als <svg:path>
  • bilder als <svg:image>

Spätere Pakete werden (hoffentlich) die Zeichen in laufenden Text und die Pfade zu übergeordneten Grafikobjekten konvertieren

UPDATE: Wir können jetzt aus den SVG-Zeichen wieder laufenden Text erstellen. Wir haben auch Diagramme in domänenspezifisches XML konvertiert (z. B. chemische Spektren). Siehe https://bitbucket.org/petermr/svg2xml-dev . Es ist immer noch in Alpha, aber es bewegt sich mit einer nützlichen Geschwindigkeit. Jeder kann mitmachen!

AKTUALISIEREN. (@Tim Kelty) Wir arbeiten weiterhin an PDF2SVG und nachgelagerten Tools, die (eingeschränkt) Java OCR und die Erstellung übergeordneter Grafikprimitive (Pfeile, Kästchen usw.) ausführen. Siehe - https://bitbucket.org/petermr/imageanalysishttps://bitbucket.org/petermr/diagramanalyzerhttps://bitbucket.org/petermr/norma) und https://bitbucket.org/petermr/AMI-core Dies ist ein finanziertes Projekt zur Erfassung von 100 Millionen Fakten aus der wissenschaftlichen Literatur (contentmine.org), von denen ein Großteil PDF ist.

21

Dieses Thema ist ziemlich alt, aber hier ist eine praktische Lösung, die ich gefunden habe:

http://www.cityinthesky.co.uk/opensource/pdf2svg/

Es bietet ein Tool, pdf2png, das nach der Installation genau die Aufgabe in der Befehlszeile erledigt. Ich habe es bisher mit einwandfreien Ergebnissen getestet, auch mit Bitmaps.

EDIT: Mein Fehler, dieses Tool wandelt auch Buchstaben in Pfade um, so dass es die ursprüngliche Frage nicht anspricht. Es macht jedoch trotzdem einen guten Job und kann für jeden nützlich sein, der nicht beabsichtigt, den Code in der SVG-Datei zu ändern, also werde ich den Beitrag verlassen.

18
pierre

Hier ist der Prozess, den ich letztendlich verwendet habe. Das Hauptwerkzeug, das ich benutzte, war Inkscape, das in der Lage war, Text in Ordnung zu konvertieren.

  • verwendete Adobe Acrobat Pro-Aktionen mit JavaScript, um die PDF
  • lief Inkscape Portable 0.48.5 von Windows Cmd, um in SVG zu konvertieren
  • ich habe einige manuelle Änderungen an einem bestimmten SVG-XML-Attribut vorgenommen, mit dem ich Probleme hatte, indem ich Windows Cmd und Windows PowerShell verwendet habe

Separate Seiten: Adobe Acrobat Pro mit JavaScript

Mit Adobe Acrobat Pro Actions (ehemals Batch Processing) können Sie eine benutzerdefinierte Aktion erstellen, um PDF Seiten in separate Dateien zu trennen. Alternativ können Sie PDFs möglicherweise mit GhostScript aufteilen

Acrobat JavaScript Aktion zum Teilen von Seiten

/* Extract Pages to Folder */

var re = /.*\/|\.pdf$/ig;
var filename = this.path.replace(re,"");

{
    for ( var i = 0;  i < this.numPages; i++ )
    this.extractPages
     ({
        nStart: i,
        nEnd: i,
        cPath : filename + "_s" + ("000000" + (i+1)).slice (-3) + ".pdf"
    });
};

PDF zu SVG Konvertierung: Inkscape mit Windows CMD Batch-Datei

Mit Windows Cmd erstellte Batch-Datei, um alle PDF Dateien in einem Ordner zu durchlaufen und sie in SVG zu konvertieren

Batch-Datei zum Konvertieren von PDF in SVG im aktuellen Ordner

:: ===== SETUP =====
@echo off
CLS
echo Starting SVG conversion...
echo.

:: setup working directory (if different)
REM set "_work_dir=%~dp0"
set "_work_dir=%CD%"

:: setup counter
set "count=1"

:: setup file search and save string
set "_work_x1=pdf"
set "_work_x2=svg"
set "_work_file_str=*.%_work_x1%"

:: setup inkscape commands
set "_inkscape_path=D:\InkscapePortable\App\Inkscape\"
set "_inkscape_cmd=%_inkscape_path%inkscape.exe"

:: ===== FIND FILES IN WORKING DIRECTORY =====
:: Output from DIR last element is single  carriage return character. 
:: Carriage return characters are directly removed after percent expansion, 
:: but not with delayed expansion.

pushd "%_work_dir%"
FOR /f "tokens=*" %%A IN ('DIR /A:-D /O:N /B %_work_file_str%') DO (
    CALL :subroutine "%%A"
)
popd

:: ===== CONVERT PDF TO SVG WITH INKSCAPE =====

:subroutine
echo.
IF NOT [%1]==[] (

    echo %count%:%1
    set /A count+=1

    start "" /D "%_work_dir%" /W "%_inkscape_cmd%" --without-gui --file="%~n1.%_work_x1%" --export-dpi=300 --export-plain-svg="%~n1.%_work_x2%"

) ELSE (
    echo End of output
)
echo.

GOTO :eof

:: ===== INKSCAPE REFERENCE =====

:: print inkscape help
REM "%_inkscape_cmd%" --help > "%~dp0\inkscape_help.txt"
REM "%_inkscape_cmd%" --verb-list > "%~dp0\inkscape_verb_list.txt"

Bereinigungsattribute: Windows Cmd und PowerShell

Mir ist klar, dass es nicht empfehlenswert ist, SVG- oder XML-Tags oder -Attribute aufgrund möglicher Abweichungen manuell mit Gewalt zu bearbeiten, und dass stattdessen ein XML-Parser verwendet werden sollte. Ich hatte jedoch ein einfaches Problem, bei dem die Strichbreite in einer Zeichnung sehr klein war und in einer anderen die Schriftfamilie falsch identifiziert wurde. Daher habe ich das vorherige Windows Cmd-Stapelskript grundlegend geändert, um ein einfaches Suchen und Ersetzen durchzuführen. Die einzigen Änderungen betrafen die Definitionen der Suchzeichenfolgen und das Aufrufen eines PowerShell-Befehls. Der PowerShell-Befehl führt ein Suchen und Ersetzen durch und speichert die geänderte Datei mit einem hinzugefügten Suffix. Ich habe einige andere Referenzen gefunden, die besser zum Parsen oder Ändern der resultierenden SVG-Dateien verwendet werden könnten, wenn eine andere geringfügige Bereinigung durchgeführt werden muss.

Änderungen zum manuellen Suchen und Ersetzen von SVG-XML-Daten

:: setup file search and save string
set "_work_x1=svg"
set "_work_x2=svg"
set "_work_s2=_mod"
set "_work_file_str=*.%_work_x1%"

powershell -Command "(Get-Content '%~n1.%_work_x1%') | ForEach-Object {$_ -replace 'stroke-width:0.06', 'stroke-width:1'} | ForEach-Object {$_ -replace 'font-family:Times Roman','font-family:Times New Roman'} | Set-Content '%~n1%_work_s2%.%_work_x2%'"

Hoffe das könnte jemandem helfen

Verweise

Adobe Acrobat Pro-Aktionen und JavaScript-Verweise auf separate Seiten

GhostScript verweist auf separate Seiten

Inkscape-Befehlszeilenreferenzen für PDF zu SVG-Konvertierung

Windows Cmd-Stapeldateiskriptreferenzen

XML-Tag-/Attributersetzungsrecherche

9
ClearBlueSky85

Bash-Skript zum Konvertieren jeder Seite eines PDF in eine eigene SVG-Datei.

#!/bin/bash
#
#  Make one PDF per page using PDF toolkit.
#  Convert this PDF to SVG using inkscape
#

inputPdf=$1

pageCnt=$(pdftk $inputPdf dump_data | grep NumberOfPages | cut -d " " -f 2)

for i in $(seq 1 $pageCnt); do
    echo "converting page $i..."
    pdftk ${inputPdf} cat $i output ${inputPdf%%.*}_${i}.pdf
    inkscape --without-gui "--file=${inputPdf%%.*}_${i}.pdf" "--export-plain-svg=${inputPdf%%.*}_${i}.svg"
done

Verwenden Sie zum Generieren in PNG --export-png Usw.

7
Alain Pannetier

Wenn DVI zu SVG eine Option ist, können Sie auch dvisvgm verwenden, um eine DVI-Datei in eine SVG-Datei zu konvertieren. Dies funktioniert beispielsweise perfekt für LaTeX-Formeln (mit der Option --no-fonts):

dvisvgm --no-fonts input.dvi -o output.svg

Es gibt auch pdf2svg , das Poppler und Cairo verwendet, um ein PDF in SVG zu konvertieren. Als ich das versuchte, wurde die SVG perfekt in inkscape gerendert.

6
dhaumann

Ich fand, dass xfig hervorragende Arbeit geleistet hat:

pstoedit -f fig foo.pdf foo.fig
xfig foo.fig

export to svg

Es hat viel bessere Arbeit geleistet als inkscape. Eigentlich war es wahrscheinlich pdtoedit, das es getan hat.

1
user877329

Hier ist die NodeJS REST api for two PDF Render-Skripte. https://github.com/pumppi/pdf2images

Skripte sind: pdf2svg und Imagemagicks convert

0
user257980