PDF를 깨끗한 SVG로 변환 하시겠습니까? [닫은]


114

PDF를 SVG로 변환하려고합니다. 그러나 내가 사용하는 것은 현재 모든 텍스트의 모든 문자에 대한 경로를 매핑합니다. 즉, 소스 파일의 텍스트를 변경하면보기 흉해 보입니다.

가장 깨끗한 PDF to SVG 변환기가 무엇인지 궁금합니다. 경로가없는 것은 단순히 필요하지 않은 텍스트 영역입니다. 아시다시피 PDF와 SVG는 상당히 유사하므로 좋은 변환기가 있다고 가정합니다.


11
'아시다시피 PDF와 SVG는 상당히 비슷합니다 ...' ?!?!? 이 경우, 당신은 알고 더 많은 내가 ...보다
커트 Pfeifle

22
둘 다 벡터 기반 형식이라는 점에서 유사합니다. 그것이 비교가 끝나는 곳입니다.
Frank Rem 2012

1
둘 다 텍스트의 절대 위치를 많이 사용한다고 생각합니다.
Bryan Field

대화 형 (양식 필드) PDF를 사용하여이 작업을 수행하는 사람이 브라우저에서 대화 형 상태를 유지하고 렌더링 된 SVG 위에 INPUT을 겹쳐 놓을 수 있습니까?
Tim

답변:


84

Inkscape는 Wikipedia의 많은 사람들이 PDF를 SVG로 변환하는 데 사용합니다.

http://inkscape.org/

그렇게하는 방법에 대한 편리한 가이드도 있습니다!

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


4
Inkscape는 텍스트를 경로로 변경하기 때문에 너무 잘 작동하지 않습니다. 또한 글꼴 데이터가 자주 손실되지만 설치된 좋은 글꼴과 비슷하지 않은 것 같습니다. SVG가 할 수없는 경우 PDF는 어떻게 표시합니까?
DanRedux 2012

그것은 공정한 질문입니다. 저는 두 형식 모두에 익숙하지만 주제에 대해 많은 연구를하지 않았습니다. 내가 살펴볼 수 있습니다. 두 형식이 빌드되는 방식으로 귀결 될 수 있다고 생각합니다. 예를 들어 SVG는 XML로 빌드되고 PDF는 자체 XML 유형 형식을 사용합니다.
Saintt Sheldon Patnett

3
글쎄, 내가 이것을 원하는 이유는 PHP를 사용하여 텍스트를 편집 할 수 있기를 원하기 때문입니다. PDF로 직접 할 수 있지만 PDF는 HTML로 쉽게 인라인 될 수 없지만 SVG는 가능합니다. 난 그냥 .. PDF를 고수하고 그것의 값을 편집 한 후 PHP에서 JPG로 변환 할 수 있습니다
DanRedux

8
@DanRedux : AFAIK, Inkscape에서 '글꼴 텍스트를 경로로' 변환 끌 수 있습니다 . 잉크 스케이프 명령 줄에서 당신은 할 수 있습니다 추가하여이 변환을 --export-text-to-path.
Kurt Pfeifle 2012

1
분명하지만 Illustrator는 PDF를 SVG로 변환 할 수 있습니다. 여기에 와서 Inkscape를 다운로드하고 Illustrator가 있다는 것을 깨달았습니다. en.wikipedia.org/wiki/Wikipedia:Graphics_Lab/Resources/…
E. Sundin

83

GUI를 열지 않고 명령 줄에서만 Inkscape를 사용할 수 있습니다. 이 시도:

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

모든 명령 줄 옵션의 전체 목록을 보려면를 실행하십시오 inkscape --help.


이것은 나를 위해 텍스트의 공간을 제거합니다.
MaxNoe

1
@MaxNoe : 가능합니다. 그러나 이것은 내부적으로 특정 PDF가 구성되는 방식의 "속성"입니다. PDF에서 "텍스트"를 인식하고 추출 할 때의 어려움에 대한 설명은 GitHub에서 직접 코딩 한 PDF 파일 (주석 포함)을 참조하십시오 . (선택한 텍스트 편집기와 PDF 뷰어에서 열고 파일에서 텍스트를 복사하여 붙여 넣습니다.)
Kurt Pfeifle

예, tex가 공백을 상자로 렌더링하는 방식과 관련이 있다고 생각합니다.
MaxNoe

23

현재 그래픽 출력을 잘 지원 하는 PDFBox 를 사용하고 있습니다. 벡터 스트로크 추출 및 글꼴 관리에 대한 좋은 지원이 있습니다. 시험해볼 수있는 몇 가지 좋은 도구가 있습니다 (예 : PDFReader가 Java Graphics2D로 표시됨). Batik과 같은 SVG 도구를 사용하여 그래픽 도구를 가로 챌 수 있습니다 (이렇게하면 좋은 캡처를 제공합니다).

모든 PDF를 SVG로 변환하는 간단한 방법은 없습니다. PDF를 만드는 데 사용 된 전략과 도구에 따라 다릅니다. 일부 텍스트는 벡터로 변환되어 쉽게 재구성 할 수 없습니다. 벡터 글꼴을 설치하고 찾아보아야합니다.

업데이트 : 이제 더 이상 Batik을 사용하지 않는 패키지 PDF2SVG 로 개발했습니다 .

다양한 PDF에서 테스트되었습니다. 다음으로 구성된 SVG 출력을 생성합니다.

  • 문자 <svg:text>당 하나의 문자
  • 경로 <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/normahttps://bitbucket.org/petermr/ami-core . 이것은 대부분이 PDF 인 과학 문헌 (contentmine.org)에서 1 억 개의 사실을 캡처하기위한 자금 지원 프로젝트입니다.


19

이 주제는 꽤 오래되었지만 여기 내가 찾은 편리한 솔루션이 있습니다.

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

일단 설치되면 명령 줄에서 정확히 작업을 수행하는 도구 pdf2png를 제공합니다. 비트 맵을 포함하여 지금까지 비난 할 수없는 결과로 테스트했습니다.

편집 : 내 실수,이 도구는 문자를 경로로 변환하므로 초기 질문을 해결하지 않습니다. 그러나 어쨌든 그것은 좋은 일을하고 svg 파일의 코드를 수정하지 않으려는 모든 사람에게 유용 할 수 있으므로 게시물을 남겨 두겠습니다.


우분투에서는 다음과 같이 설치할 수 있습니다 : $ sudo apt-get install pdf2svg
tvw

2
문자를 경로로 변환하지만 결과는 훌륭합니다. 약간의 수정을 위해 편집기로 직접 SVG를 편집했습니다. inkscape SVG로 inkscape로 열고 저장하면 코드가 더 좋아 보이고 개체 ID가 있으므로 변경하려는 항목을 쉽게 찾을 수 있습니다.
tvw

1
.NET을 사용하여 Mac에 설치할 수 있습니다 brew install pdf2svg.
Colas

10

내가 사용한 과정은 다음과 같습니다. 내가 사용한 주요 도구는 텍스트를 잘 변환 할 수있는 Inkscape였습니다.

  • JavaScript와 함께 Adobe Acrobat Pro 작업을 사용하여 PDF 시트를 분할했습니다.
  • Windows Cmd에서 Inkscape Portable 0.48.5를 실행하여 SVG로 변환
  • Windows Cmd 및 Windows PowerShell을 사용하여 문제가있는 특정 SVG XML 특성을 수동으로 편집했습니다.

별도 페이지 : JavaScript가 포함 된 Adobe Acrobat Pro

Adobe Acrobat Pro 작업 (이전의 일괄 처리)을 사용하여 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%'"

이것이 누군가를 도울 수 있기를 바랍니다.

참고 문헌

별도의 페이지에 대한 Adobe Acrobat Pro 작업 및 JavaScript 참조

별도의 페이지에 대한 GhostScript 참조

PDF를 SVG로 변환하기위한 Inkscape 명령 줄 참조

Windows Cmd 배치 파일 스크립트 참조

XML 태그 / 속성 대체 연구


7

DVI to SVG가 옵션 인 경우 dvisvgm 을 사용 하여 DVI 파일을 SVG 파일로 변환 할 수도 있습니다 . 이것은 LaTeX 공식의 경우 완벽하게 작동합니다 (옵션 포함 --no-fonts).

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

poppler와 Cairo를 사용하여 pdf를 SVG로 변환하는 pdf2svg 도 있습니다 . 이것을 시도했을 때 SVG는 inkscape.


1
skak 패키지 (체스 조각)에서 일부 LaTeX 기호를 렌더링하는 PDF가 있습니다. 기호가 Arial 문자가되기 때문에이 특정 파일은 Inkscape에서 잘 처리되지 않습니다. pdf2svg로 올바른 결과를 얻었습니다.
LRMAAX 2013 년

Windows 시스템의 경우 여기에 컴파일 된 바이너리 도구 세트가 있습니다. Poppler for Windows .
Paolo Gibellini

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, 등을 사용하십시오 .


1

나는 그것이 xfig훌륭한 일을 했다는 것을 알았습니다.

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

export to svg

그것은 잉크 스케이프보다 훨씬 더 잘했습니다. 실제로 그것을 한 것은 아마도 pdtoedit 일 것입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.