3

我正在用Java寫一個程序(我正在使用Ubuntu)。我正在使用Jodconverter將文檔轉換爲PDF。我必須將文檔轉換爲橫向模式,但我已經讀過Jodconverter不支持方向更改。我也嘗試過使用OpenOffice API,但我面臨同樣的問題。如何使用Java庫將文檔轉換爲橫向模式?

有沒有轉換爲橫向的Java庫?

回答

0

導出爲PDF格式,然後使用像PDFbox這樣的PDF庫將頁面旋轉90度。

在所有頁面上嘗試PDPage.setRotation(int)PDDocument.getDocumentCatalog().getAllPages())。

+0

我試圖PDFBOX LIB但它僅旋轉頁面....但我必須改變爲橫向頁面的方向時,我們在橫向模式下打印文檔就像。 –

+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

嘗試壓倒一切的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); 
      } 

     };