2017-05-19 8 views
7

현재 서버에서 PDF의 base64 표현을 얻는 웹 응용 프로그램이 있습니다. Mozilla의 pdf.js를 사용하여 <canvas>에이 파일을 표시하고 드롭 다운 목록에서 페이지를 전환 할 수 있습니다.브라우저에서 * 기존 * PDF 편집

내가 찾은 모든 내용과 Can Mozilla's pdf.js modify PDFs?에 따르면 pdf.js.와 함께 PDF를 편집 할 수 없습니다.

나는 jsPDF을 발견하고 나는 그것으로 새로운 PDF 문서를 캔버스을 각 페이지를 위해 함께 .toDataURL()를하고 구축 할 수있어,하지만 동시에 두 가지 문제가 있습니다했습니다

  1. 새로 생성 된 PDF는 각 페이지의 일련의 이미지 일 뿐이므로 원래 PDF의 모든 텍스트는 필자가 끝내면 이미지가됩니다.
  2. jsPDF로 새 PDF를 생성 한 다음이 파일의 base64를 pdf.js로 보내 캔버스에 표시합니다. 페이지의 이미지 크기가 잘못 조정 된이 단계에서 문제가 발생하여 각 페이지가 새로운 PDF가 변경 될 때마다 캔버스의 약 3/4을 차지합니다. 나는 같은 크기/규모를 유지할 수 없었습니다.

jsPDF는 기존 PDF를로드하는 것처럼 보이지 않지만 새로운 PDF 만 생성합니다. pdfmakePDFKit도 새 PDF 파일 만 만드는 것처럼 보입니다.


그래서 내 질문 :

은 (64 기수에서) PDF 파일을보기 모두 그것을 변경하기 위해 수 있나요? 이상적으로 캔버스의 변경 사항을 살펴본 다음 해당 변경 사항을 pdf 페이지에 그립니다. 완료되면이를 서버로 다시 보내려면 base64 문자열로 내 보냅니다.

+1

[PDFNetJS] (https://blog.pdftron.com/2015/11/10/pdfnetjs-html5-pdf-viewer-and-editor/)에서 살펴볼 수 있습니다. – ConnorsFan

+0

나는 그것을 보았다. 그것은 조금 과잉이다. 하나 또는 두 개의 JS 파일을 포함하는 대신 여러 개의 자산 폴더를 포함해야하는 것처럼 보입니다.이 파일을 내 환경 (Siebel 응용 프로그램)에서 작동시키기는 어려울 것입니다. 그럼에도 불구하고 나는이 파일을 찾을 때까지이 파일을 시도하고 있습니다. 더 나은 솔루션. – neilsimp1

+0

PDFNetJS는 일부 이진 데이터 인 .mem 파일을 검색하려고합니다. 이것은 내가 사용하고있는 응용 프로그램 (Siebel)에서 제공 할 수 없으므로 이것이 옵션이 아닌 것처럼 보입니다. – neilsimp1

답변

7

빠른 답변 - 아니요. 브라우저 간 해결책을 찾지 못할 가능성이 있습니다. PDF 완벽 솔루션을 찾는 것은 거의 불가능합니다. 사용자가 HTML을 편집하고 서버에서 PDF를 생성하도록하는 것이 좋습니다.

왜 - PDF 형식은 동시에 화려하고 악마처럼 보입니다. 이식성이 뛰어나기 때문에 훌륭하지만 내부 구조와 저장 메커니즘으로 인해 악마 같은 존재입니다. HTML과 같이 친숙한 'DOM'은 없습니다. 우리가 이식 가능한 문서 형식을 개발하기 위해 새로 시작한다면 우리가 선택할 PDF가 아닙니다. 그러나 PDF는 현재 너무 많은 기세가 없어져 버립니다.

젊은 시청자는이 조병의 형식이 어떻게 시장을 선도하는 위치에 왔는지, 어디에서 왔는지 궁금 할 것입니다. 글쎄, PDF의 창립자가 XML, JSON, HTML 및 인터넷 이전의 디자인을 발표했을 때, 그들은 오늘날의 문서 공유를 염두에두고 작업하지 않았다. PostScript 프린터 드라이버 개념 인 인쇄 지침을 인코딩하는 더 나은 방법을 연구하고있었습니다. 프린터가 프린터를 사용하기 전에는 편집 할 수 없으며 다른 용도로는 쓸모가 없었습니다. 그런 다음 누군가가 PostScript 드로잉 지침을 화면으로 해석 할 수 있다는 사실을 알아 차린 후이를 이동 가능한 교차 장치 디스플레이 개념으로 채택 할 수있는 환상적인 잠재력을 발견했습니다. 그리고 여기 있습니다.

질문으로 돌아 가기 - 의미있는 GUI 방식으로 PDF를 편집하려면 PDF의 압축을 풀고 구성 요소 (이미지, 형식이 지정된 텍스트, 페이지)를 디스플레이 장치에 렌더링해야합니다. 그러면 사람들이 레이아웃을 엉망으로 만들 수 있습니다. 그런 다음 PDF를 다시 포장하십시오. PDF 표준에 따라이 작업을 완벽하게 수행해야합니다. 그렇지 않으면 편집 된 PDF 파일의 다운 스트림 소비자가 충돌하거나 렌더링 할 수없는 경우가 있습니다.다양한 Acrobat 표준 레벨과 편집 패키지 (Word, Illustrator, InDesign) 공급 업체가 PDF 파일을 처리하는 단축키 및 확장 기능을 제공해야합니다. 레이어, 축소판 그림 등이 포함됩니다.

그러면 색상이 나타납니다. PDF 사양을 읽으면 원래 PDF 제작자가 사용할 수있는 색상 공간 옵션 배열이 있음을 알 수 있습니다. 화면상의 적절한 장치 색상과 뒷면의 색상으로이를 해석해야합니다.

글꼴. 글꼴은 부분 집합에 포함되거나 포함되지 않을 수 있습니다. PDF와의 충실도를 유지하려면 그리기 표면의 벡터 그래픽으로 PDF에 정의 된 크기로 글리프를 구현해야합니다. 이는 주로 플랫폼에 종속적 인 유형 라이브러리 (까다로운 크로스 플랫폼)를 활용하는 것을 의미합니다. 또한 대부분의 사람들이 엉덩이와 전문가를 보는데 사용하기를 원하는 글꼴에 대해 비싸지 만 적절한 사용을 위해 글꼴을 라이센스해야합니다.

PDF에서 레이어링, 크기 조정 및 회전 기능을 사용하면 HTML 캔버스를 그리기 화면으로 볼 수 있습니다. 알고있는 사람이라면 캔버스 세계에서 워드 프로세싱 유형 기능에 대해 많은 것을 알게 될 것입니다.

불가능하지 않지만 어렵습니다.

PDF를 디스플레이로 렌더링하는 구성 요소는 주로 인쇄 드라이버로 작동하며 PDF 드로잉 지침을 철저히 준수하며 대개 래스터 또는 SVG 그래픽을 생성합니다. 이것은 일방 통행 거리입니다. 그들은 읽고 그리지 만, 그려진 물건에 '핸들'에 대한 감각이 없습니다. 아무 핸들도 조작을 의미하지 않으며,이 사람들은 확실히 당신이 수정하고 다시 쓸 수 있도록하려는 의도가 거의 없습니다.

많은 'PDF로 저장'제품을 찾을 수 있습니다. 클라이언트 측에서는 픽셀 집합을 잡아 내고 래스터 그래픽을 'PDF'정의가 가장 얇은 베니어 파일로 감싸는쪽으로 기울어 질 것입니다. 서버 기반의 경우에는 매우 강력합니다. Aspose와 ABCPDF와 같은 도구가 많이 있지만, PDF 서버를 제공하는 것이 좋습니다.하지만 이는 OP에서 찾지 않은 것입니다.

요약 - 매우 복잡한 주제입니다. 잠재적 인 것으로 여겨지는 것이 있다면 PDF 기능에 대한 많은 제약이있을 수 있으며 따라서 안전하게 편집 할 수있는 것에 대한 제한이있을 것입니다.

궁극적으로 PDF로 내 보낸 문서를 온라인으로 편집하려면 문서 소스의 html 버전을 유지하고 사용자가 TinyMCE, CKEditor 등으로이 파일을 편집하도록 한 다음 저장된 원본 HTML을 가져 와서 PDF로 렌더링하는 서버 측 도구 ABCPDF와 같은 도구를 사용하면 이미지, 머리말 및 꼬리말, 페이지 번호 등을 충실하게 HTML에 렌더링 할 수 있습니다.

이것은 글꼴에 대한 절충점이 있지만 (가정의 필요성에 대한 실용적인 답입니다. 라이센싱) 문제, 브라우저 기반 편집자의 clunkiness, 일부 HTML 편집 구성 요소에 의해 규정 된 HTML의 모든 이상한 점 등이 있습니다. 그러나 그것은 실행 가능합니다.

최종 생각 - 필요한 범위를 다시 생각해보십시오. 서버에서 HTML 편집 및 PDF로 변환하는 것이 유용 할 수 있다면 잘된 방법이며 클라이언트 및 서버가 무료 및 상용 구성 요소를 모두 찾을 수 있습니다.

편집 : PDF에 주석을 추가해야하는 경우 작업이 훨씬 수월합니다. 서버에서 문서의 페이지 이미지를 생성하여 클라이언트로 보내고 사용자에게 표시하고 사용자가 마크 업하도록하고 주석의 좌표를 서버에 다시 캡처 한 다음 서버 측 PDF 라이브러리를 사용하여 주석을 PDF로 렌더링합니다. 서버 측 PDF를 이미지 조작 및 클라이언트 측 프리젠 테이션 및 주석 캡처에 사용하려면 다양한 스킬 셋이 필요하지만 성취 할 수 있습니다.

+0

기본적으로 필요한 것은 사용자가 이전에 업로드 한 PDF를 열어 섹션을 강조 표시하거나 원을 그어서 해당 주석을 서버의 PDF에 다시 저장하는 것입니다. 응용 프로그램의 설정으로 인해 파일의 base64를 보내고받는 것 외에는 할 수있는 서버가 없습니다. 내 희망은 PDF를 가져 와서 하이라이트 이미지를 그려 넣는 것입니다. 문서 컨텐트의 텍스트 편집이나 조작은 일어나지 않아도됩니다. – neilsimp1

+0

그런 심오한 답변을 주셔서 감사합니다. 우리가 여기서 요구 사항을 바꿀 수 없는지 지켜 볼 것입니다. 이 질문에 대한 답변을 곧 찾을 수 없다면 나는 당신의 답을 옳은 것으로 표시 할 것입니다. – neilsimp1

+0

안녕하세요! 별도의 오버레이 캔버스에서 PDF로 그려진 '주석'상자의 좌표를 얻는 것과 관련하여 그려진 상자 시작의 PDF X, Y 좌표를 정확하게 결정하는 방법에 대한 제안이 있습니까? (위 왼쪽) 상자의 높이/너비와 함께? PDF로 다시 작성할 필요가 없으며 가져 와서 저장할 수 있어야합니다. 미리 감사드립니다! :) –