0

我在设置包含“a&b”之类的 & 符号的页眉文本时遇到了问题。'&' 后面的文字 在 pdf 中消失可能是因为它是Aspose中的保留键。我的代码如下所示:

 PageSetup pageSetup = workbook.getWorksheets().get(worksheetName).getPageSetup();
 //calling the function
  setHeaderFooter(pageSetup, parameters, criteria)

 //function for setting header and footer
 def setHeaderFooter(PageSetup pageSetup, parameters, criteria = [:])
    {
       def selectedLoa=getSelectedLoa(parameters)
       if(selectedLoa.length()>110){
        String firstLine = selectedLoa.substring(0,110);
        String secondLine = selectedLoa.substring(110);
        if(secondLine.length()>120){
            secondLine = secondLine.substring(0,122)+"...."
        }
        selectedLoa = firstLine+"\n"+secondLine.trim();
    }
    def periodInfo=getPeriodInfo(parameters, criteria)
    def reportingInfo=periodInfo[0]
    def comparisonInfo=periodInfo[1]
    def benchmarkName=getBenchmark(parameters)
    def isNonComparison = criteria.isNonComparison?
    criteria.isNonComparison:false

    def footerInfo="&BReporting Period:&B " + reportingInfo+"\n"
    if (comparisonInfo && !isNonComparison){
        footerInfo=footerInfo+"&BComparison Period:&B " +comparisonInfo+"\n"
    }
    if (benchmarkName){
        footerInfo+="&BBenchmark:&B "+benchmarkName
    }
   //where I encounterd the issue,selectedLoa contains string with ampersand
    pageSetup.setHeader(0, pageSetup.getHeader(0) + "\n&\"Lucida Sans,Regular\"&8&K02-074&BPopulation:&B "+selectedLoa)

    //Insertion of footer
    pageSetup.setFooter(0,"&\"Lucida Sans,Regular\"&8&K02-074"+footerInfo)
    def downloadDate = new Date().format("MMMM dd, yyyy")
    pageSetup.setFooter(2,"&\"Lucida Sans,Regular\"&8&K02-074" + downloadDate)

    //Insertion of logo
    try{
        def bucketName = parameters.containsKey('printedRLBucketName')?parameters.get('printedRLBucketName'):null
        def filePath = parameters.containsKey('printedReportLogo')?parameters.get('printedReportLogo'): null

        // Declaring a byte array
        byte[] binaryData

        if(!filePath || filePath.contains("null") || filePath.endsWith("null")){
            filePath = root+"/images/defaultExportLogo.png"
            InputStream is = new FileInputStream(new File(filePath))
            binaryData = is.getBytes()
        }else {
            AmazonS3Client s3client = amazonClientService.getAmazonS3Client()
            S3Object object = s3client.getObject(bucketName, filePath)

            // Getting the bytes out of input stream of S3 object
            binaryData = object.getObjectContent().getBytes()
        }

        // Setting the logo/picture in the right section (2) of the page header
        pageSetup.setHeaderPicture(2, binaryData);

        // Setting the script for the logo/picture
        pageSetup.setHeader(2, "&G");

        // Scaling the picture to correct size
        Picture pic = pageSetup.getPicture(true, 2);
        pic.setLockAspectRatio(true)
        pic.setRelativeToOriginalPictureSize(true)
        pic.setHeight(35)
        pic.setWidth(Math.abs(pic.getWidth() * (pic.getHeightScale() / 100)).intValue());
    }catch (Exception e){
        e.printStackTrace()
    }
}

在这种情况下,在&符号消失后,我在所有其他文本的 pdf 标题中只得到“a”。请为此建议我一个解决方案。我正在使用 aspose 18.2

4

2 回答 2

0

我们在带有以下代码片段的 PDF 页面上添加了标题,但是当与符号包含在标题文本中时,我们没有注意到任何问题。

// open document
Document document = new Document(dataDir + "input.pdf");
// create text stamp
TextStamp textStamp = new TextStamp("a&bcdefg");
// set properties of the stamp
textStamp.setTopMargin(10);
textStamp.setHorizontalAlignment(HorizontalAlignment.Center);
textStamp.setVerticalAlignment(VerticalAlignment.Top);

// set text properties
textStamp.getTextState().setFont(new FontRepository().findFont("Arial"));
textStamp.getTextState().setFontSize(14.0F);
textStamp.getTextState().setFontStyle(FontStyles.Bold);
textStamp.getTextState().setFontStyle(FontStyles.Italic);
textStamp.getTextState().setForegroundColor(Color.getGreen());

// iterate through all pages of PDF file
for (int Page_counter = 1; Page_counter <= document.getPages().size(); Page_counter++) {
        // add stamp to all pages of PDF file
        document.getPages().get_Item(Page_counter).addStamp(textStamp);
}
// save output document
document.save(dataDir + "TextStamp_18.8.pdf");

请确保在您的环境中使用 Aspose.PDF for Java 18.8。有关添加页眉的更多信息,您可以访问页眉或页脚部分中的添加文本图章

如果您在添加标题时遇到任何问题,请通过 Google Drive、Dropbox 等与我们分享您的代码片段和生成的 PDF 文档,以便我们进行调查以帮助您。

PS:我与 Aspose 一起担任开发人员宣传员。

于 2018-09-06T10:48:16.143 回答
0

嗯,是的,“&”是通过 Aspose.Cells API 在 MS Excel 电子表格中插入页眉/页脚时的保留字。为了解决您的问题,您必须放置另一个&符号以将“&(&符号)”粘贴到标题字符串中。请参阅示例代码以供参考:例如 示例代码:

Workbook wb = new Workbook();

        Worksheet ws = wb.getWorksheets().get(0);
        ws.getCells().get("A1").putValue("testin..");

        String headerText="a&&bcdefg";
        PageSetup pageSetup = ws.getPageSetup();
        pageSetup.setHeader(0, headerText);

        wb.save("f:\\files\\out1.xlsx");
        wb.save("f:\\files\\out2.pdf");

希望这个对你有帮助。

我在 Aspose 担任支持开发人员/传播者。

于 2018-09-07T10:49:33.797 回答