3

저는 Java로 프로그램을 작성하고 있습니다 (우분투를 사용하고 있습니다). Jodconverter를 사용하여 문서를 PDF로 변환합니다. 문서를 가로 모드로 변환해야하지만 Jodconverter가 방향 변경을 지원하지 않는다는 사실을 읽었습니다. 나는 또한 OpenOffice API를 시도했지만 같은 문제에 직면하고있다.Java 라이브러리를 사용하여 문서를 가로 모드로 변환하려면 어떻게해야합니까?

가로로 변환하는 Java 라이브러리가 있습니까? 오픈 오피스 문서와 Jodconverter를 사용에 대한 비슷한 질문에서

답변

0

PDF로 내보내기 후 PDFbox과 같은 PDF 라이브러리를 사용하여 페이지를 90도 회전하십시오.

모든 페이지에 PDPage.setRotation(int) (PDDocument.getDocumentCatalog().getAllPages())을 시도하십시오.

+0

최우선 . –

+0

"방향"을 변경하려면 페이지의 경계를 변경해야합니다 (PDPAGE.setMediaBox()를 시도하십시오. 실패하면 사각형을 허용하는 다른 메소드를 시도하십시오). –

0

해결책을 찾았습니다. 나는 Java 용 오픈 오피스 API를 사용하여 가로 PDF로 문서를 변환했다. 여기에 같은 코드가 있습니다.

System.out.println("starting..."); 
       String oooExeFolder = "/usr/lib/openoffice/program"; 
       XComponentContext xContext = BootstrapSocketConnector.bootstrap(oooExeFolder); 

       XMultiComponentFactory xMCF = xContext.getServiceManager(); 

       Object oDesktop = xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext); 

       XComponentLoader xCLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, oDesktop); 
       System.out.println("loading "); 
       PropertyValue[] printerDesc = new PropertyValue[1]; 
       printerDesc[0] = new PropertyValue(); 
       printerDesc[0].Name = "PaperOrientation"; 
       printerDesc[0].Value = PaperOrientation.LANDSCAPE; 
       // Create a document 
       XComponent document = xCLoader.loadComponentFromURL(loadUrl, "_blank", 0, printerDesc); 
       // Following property will convert doc into requested orientation. 
       XPrintable xPrintable = (XPrintable) UnoRuntime.queryInterface(XPrintable.class, document); 
       xPrintable.setPrinter(printerDesc); 
       PropertyValue[] conversionProperties = new PropertyValue[3]; 
       conversionProperties[1] = new PropertyValue(); 
       conversionProperties[1].Name = "FilterName"; 
       conversionProperties[1].Value = "writer_pdf_Export";// 
       conversionProperties[0] = new PropertyValue(); 
       conversionProperties[0].Name = "Overwrite "; 
       conversionProperties[0].Value = new Boolean(true); 
       System.out.println("closing"); 
       XStorable xstorable = (XStorable) UnoRuntime.queryInterface(XStorable.class, document); 
       xstorable.storeToURL(storeUrl, conversionProperties); 
       System.out.println("closing"); 
       XCloseable xcloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, document); 
       xcloseable.close(false); 
0

시도 내가 PDFbox lib 디렉토리를 시도했지만 그것은 단지 페이지를 회전 ....하지만 우리가 가로 모드에서 문서를 인쇄 할 때처럼 가로로 페이지의 방향을 변경해야 OfficeDocumentConverter

OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager) { 

      private Map<String, Object> createDefaultLoadProperties() { 
       Map<String, Object> loadProperties = new HashMap<String, Object>(); 
       loadProperties.put("Hidden", true); 
       loadProperties.put("ReadOnly", true); 
       loadProperties.put("UpdateDocMode", UpdateDocMode.QUIET_UPDATE); 
       return loadProperties; 
      } 

      @Override 
      public void convert(File inputFile, File outputFile, DocumentFormat outputFormat) throws OfficeException { 
       String inputExtension = FilenameUtils.getExtension(inputFile.getName()); 
       DocumentFormat inputFormat = getFormatRegistry().getFormatByExtension(inputExtension); 
       inputFormat.setLoadProperties(Collections.singletonMap("PaperOrientation", PaperOrientation.LANDSCAPE)); 
       StandardConversionTask conversionTask = new StandardConversionTask(inputFile, outputFile, outputFormat) { 

        @Override 
        protected void modifyDocument(XComponent document) throws OfficeException { 
         PropertyValue[] printerDesc = OfficeUtils.toUnoProperties(Collections.singletonMap("PaperOrientation", PaperOrientation.LANDSCAPE)); 
         XPrintable xPrintable = cast(XPrintable.class, document); 
         try { 
          xPrintable.setPrinter(printerDesc); 
         } catch (com.sun.star.lang.IllegalArgumentException e) { 
          logger.error(e.getMessage()); 
         } 
         super.modifyDocument(document); 
        } 
       }; 
       conversionTask.setDefaultLoadProperties(createDefaultLoadProperties()); 
       conversionTask.setInputFormat(inputFormat); 
       officeManager.execute(conversionTask); 
      } 

     }; 
관련 문제