121

PDF を SVG に変換しようとしています。ただし、現在使用しているものは、すべてのテキストのすべての文字のパスをマップします。つまり、ソース ファイルのテキストを変更すると、見た目が悪くなります。

最もクリーンな PDF から SVG へのコンバーターは何かと思っていました。うまくいけば、パスを必要としないテキスト領域へのパスがないものです。ご存じのとおり、PDF と SVG はかなり似ているため、優れたコンバーターがいくつかあると思います。

4

9 に答える 9

96

GUI を開かずに、コマンドラインでのみ Inkscape を使用できます。これを試して:

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

すべてのコマンドライン オプションの完全なリストについては、 を実行してinkscape --helpください。

于 2012-04-24T00:04:01.587 に答える
85

Inkscape は、ウィキペディアで PDF を SVG に変換するために多くの人が使用しています。

http://inkscape.org/

彼らはそうする方法についての便利なガイドさえ持っています!

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

于 2012-04-23T20:53:12.483 に答える
24

私は現在、グラフィック出力を適切にサポートするPDFBoxを使用しています。ベクター ストロークの抽出とフォントの管理が適切にサポートされています。試してみるための優れたツールがいくつかあります (たとえば、PDFReader は Java Graphics2D として表示されます)。Batik のような SVG ツールを使用してグラフィックス ツールをインターセプトできます (これを行うと、適切なキャプチャが得られます)。

すべての PDF を SVG に変換する簡単な方法はありません。PDF の作成に使用する戦略とツールによって異なります。一部のテキストはベクターに変換され、簡単に再構築できません。ベクター フォントをインストールして検索する必要があります。

更新: これを、Batik を使用しないパッケージ PDF2SVGに開発しました。

これは、さまざまな PDF でテストされています。以下で構成される SVG 出力を生成します。

  • 文字は 1<svg:text>文字につき 1 文字
  • としてのパス<svg:path>
  • としての画像<svg:image>

後のパッケージでは、(うまくいけば) 文字がテキストに変換され、パスが高レベルのグラフィックス オブジェクトに変換されます。

更新: SVG 文字からランニング テキストを再作成できるようになりました。また、ダイアグラムをドメイン固有の XML (化学スペクトルなど) に変換しました。https://bitbucket.org/petermr/svg2xml-devを参照してください。まだアルファ版ですが、実用的な速度で動いています。どなたでもご参加いただけます!

アップデート。(@Tim Kelty) PDF2SVG と、(限定的な) Java OCR と高レベルのグラフィックス プリミティブ (矢印、ボックスなど) の作成を行うダウンストリーム ツールの作業を続けています。https://bitbucket.org/petermr/を参照してください。 imageanalysis https://bitbucket.org/petermr/diagramanalyzer https://bitbucket.org/petermr/normaおよびhttps://bitbucket.org/petermr/ami-core . これは、科学文献 (contentmine.org) から 1 億件の事実を収集するための資金提供を受けたプロジェクトであり、その多くは PDF です。

于 2012-04-27T21:31:28.350 に答える
21

このトピックはかなり古いものですが、私が見つけた便利な解決策を次に示します。

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

インストールすると、コマンドラインで正確に機能するツールpdf2pngが提供されます。ビットマップを含め、これまでのところ非の打ちどころのない結果でテストしました。

編集:私の間違いです。このツールは文字もパスに変換するため、最初の質問には対応していません。ただし、とにかくうまく機能し、svg ファイル内のコードを変更するつもりがない人にとっては役立つ可能性があるため、投稿を残しておきます。

于 2015-02-05T22:41:13.680 に答える
10

これが私が最終的に使用したプロセスです。私が使用した主なツールは、テキストを問題なく変換できる Inkscape でした。

  • JavaScript で Adob​​e Acrobat Pro アクションを使用して、PDF シートを分割しました
  • SVGに変換するためにWindows CmdからInkscape Portable 0.48.5を実行しました
  • Windows Cmd と Windows PowerShell を使用して、問題があった特定の SVG XML 属性を手動で編集しました。

別のページ: JavaScript を使用した Adob​​e Acrobat Pro

Adobe Acrobat Pro Actions (以前のバッチ処理) を使用して、カスタム アクションを作成し、PDF ページを個別のファイルに分割します。または、GhostScript を使用して PDF を分割することもできます

ページを分割する Acrobat JavaScript アクション

/* 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 から SVG への変換: Windows CMD バッチ ファイルを使用した Inkscape

Windows Cmd で作成されたバッチ ファイルを使用して、フォルダー内のすべての PDF ファイルをループし、それらを SVG に変換します。

現在のフォルダーで PDF を SVG に変換するバッチ ファイル

:: ===== 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"

クリーンアップ属性: Windows Cmd および PowerShell

SVG や XML のタグや属性を手動でブルート フォース編集することは、バリエーションの可能性があるためベスト プラクティスではなく、代わりに XML パーサーを使用する必要があることを認識しています。ただし、ある図面のストローク幅が非常に小さく、別の図面ではフォント ファミリが正しく識別されないという単純な問題があったため、以前の Windows Cmd バッチ スクリプトを基本的に変更して、単純な検索と置換を実行しました。唯一の変更点は、検索文字列の定義と、PowerShell コマンドを呼び出すように変更したことです。PowerShell コマンドは、検索と置換を実行し、変更されたファイルをサフィックスを追加して保存します。他のマイナーなクリーンアップを実行する必要がある場合に、結果の SVG ファイルを解析または変更するために使用できる他の参照をいくつか見つけました。

SVG XML データを手動で検索して置換するための変更

:: 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%'"

これが誰かを助けることを願っています

参考文献

別のページへの Adob​​e Acrobat Pro アクションおよび JavaScript 参照

別のページへの GhostScript 参照

PDF から SVG への変換のための Inkscape コマンド ライン リファレンス

Windows コマンド バッチ ファイル スクリプト リファレンス

XMLタグ・属性置換研究

于 2015-05-29T20:18:04.840 に答える
7

PDF の各ページを独自の SVG ファイルに変換する Bash スクリプト。

#!/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

pngで生成するには--export-png、などを使用します...

于 2015-12-06T16:02:33.557 に答える
1

私はそれxfigが素晴らしい仕事をしたことを発見しました:

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

export to svg

それはinkscapeよりもはるかに優れた仕事をしました。実際、それを行ったのはおそらく pdtoedit でした。

于 2014-03-14T14:20:29.530 に答える
0

以下は、2 つの PDF レンダリング スクリプト用の NodeJS REST API です。 https://github.com/pumppi/pdf2images

スクリプトは次のとおりです。pdf2svg および Imagemagicks convert

于 2016-04-03T08:22:36.290 に答える