2013-05-10 5 views
0

무료 소프트웨어가 없어서 PDF에 직접적으로 그려지는 것을 극도로 짜증나게 만들었습니다.렌더링 된 PDF로 그리기 - 스윙

GUI의 일종의 캔버스 위젯을 GUI 아래에 표시하여 PDF의 내용을 화면에 그려서 기록하고 렌더링하고 파일을 저장할 때 그려지는 모든 것을 저장하려고합니다. (배경이 투명한) .png를 .pdf 위에 겹쳐서 놓습니다.

필자는 이미 iText를 사용하여 pdf를 덮어 씌우는 방법을 썼지 만 GUI에 접근하는 방법을 모르겠습니다. pdf 렌더링을 어떻게 진행해야합니까? .pdf의 페이지를 이미지 (PDF 렌더러)로 변환하고 Swing에서 그 문제를 해결하는 방법을 보았습니다. 그러나 이것이 해상도 문제 (확대/축소)를 가지고 있다고 생각합니다.

내가 가진 또 다른 아이디어는 JPedal의 뷰어 위젯을 사용하여 스윙 요소에 .pdf를 렌더링하는 것이지만 캔버스를 어떻게 설정했는지 확실하지 않습니다.

어떻게 접근해야합니까?
내 인터페이스의 일반 구조는 어떻게해야합니까?
이 옵션 중 하나를 시도하지 않았습니다. (여전히 라이브러리 인터페이스를 조사하고 있습니다.) 나는 (프로그램의 기본 구조에 관한 것이기 때문에) 조기에 조언을 구하고 싶었다.

+2

pdf에 직접 그릴 수있는 자유 소프트웨어가 부족하거나, 어둠에 노출 된 경우 (JLayer (Java6의 경우 JXLayer) 또는 GlassPane) 또는 JFrame.getRootPane/ContentPane에서 BufferedImage를 만들거나 @camickr 님이 직접 작성한 [Screen Image] (http://tips4java.wordpress.com/2008/10/13/screen-image/) – mKorbel

+0

GlassPane이 좋게 들립니다 (저는 Viwewer 꼭대기에 올려 놓을 수 있습니다). 마우스 클릭/드래그를 GlassPane의 드로잉으로 실제로 변환하는 것에 대한 조언이 있습니까? –

+0

모든 MouseEvent를 소비하려면 GlassPane (임의의 JComponent를 놓아야 함), KeyEvents는 필요한 경우 consume()에 JList를 추가하는 KeyListener 여야합니다. – mKorbel

답변

0

PDF 렌더링은 매우 복잡합니다. 우리는 ABCpdf를 개발합니다. 렌더링면에서 40 년 동안 투자 한 것 같습니다.

이렇게하려면 원하는 작업을 제한하여 시작해야합니다. 제한된 기능 세트를 사용하는 균일 한 출처에서 PDF를 가져와야하거나, 많은 PDF가 올바르게 렌더링되지 않는다는 것을 받아 들여야합니다.

다음으로 페이지 콘텐츠 스트림을 압축 해제 한 다음 PDF 운영자에게 전달해야합니다. 그런 다음 System.Drawing.Bitmap 또는 유사한 것을 만들고 각각의 PDF 드로잉 연산자를 사용하여 해당 드로잉 표면에 그립니다. Adobe 웹 사이트에서 제공되는 PDF Spec에서 연산자에 대한 자세한 내용을 확인할 수 있습니다.

제공되는 PDF 소스가 일관되고 단순하며 균일하면 몇 주 내에 의미있는 것을 얻을 수 있습니다. 해피 코딩 :-)