【问题标题】:itext positioning text absolutelyitext 绝对定位文字
【发布时间】:2010-12-10 04:10:28
【问题描述】:

在 itext 中,我有一个块/短语/段落(我不介意哪个),我想在页面上的其他位置放置一些内容,例如300 x 200。我该怎么做?

【问题讨论】:

    标签: java .net itextsharp itext


    【解决方案1】:

    最后我写了自己的方法来做。

    private void PlaceChunck(String text, int x, int y) {
            PdfContentByte cb = writer.DirectContent;
            BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
            cb.SaveState();
            cb.BeginText();
            cb.MoveText(x, y);
            cb.SetFontAndSize(bf, 12);
            cb.ShowText(text);
            cb.EndText();
            cb.RestoreState();
        }
    

    【讨论】:

    • 嗨。它是否支持换行符?
    • 我不会反对这个答案,但我不喜欢它。问题是:我如何定位一个块、短语、段落。正确答案是:通过使用 ColumnText。您可以使用 showTextAligned() 方法(仅适用于 Phrase 对象),或者如果您需要支持换行符和/或 Phrase 以外的对象,则可以使用 ColumnText 实例和 go() 方法。
    • @BrunoLowagie - 那么完整的答案怎么样?看看正确方法的解释会很有帮助。
    • 完整的答案可以在文档中找到。例如本书itextpdf.com/book 和示例tinyurl.com/itextsharpIIA2C03 我目前正在写一本(免费电子)书。一天只有 24 小时,你不应该指望人们会写关于 SO 的书。
    • @BrunoLowagie 感谢这本书,但我完全不喜欢你的方法。如果您有更好的解决方案,您可以将其发布在 SO 上,如果您不喜欢这个问题,您可以投反对票。你也没有。此外,这可能不是最好的方法,但我没有时间阅读整本书,这个答案为我提供了一个可行的解决方案来创建我的示例。一天只有24小时,不要指望人们一边工作一边看书。
    【解决方案2】:

    这是一个包含所有正确大小写和 try/catch 块的版本:

      private static void absText(String text, int x, int y) {
        try {
          PdfContentByte cb = writer.getDirectContent();
          BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
          cb.saveState();
          cb.beginText();
          cb.moveText(x, y);
          cb.setFontAndSize(bf, 12);
          cb.showText(text);
          cb.endText();
          cb.restoreState();
        } catch (DocumentException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    

    【讨论】:

    • writer.getDirectContent() 错误,如果我使用 Document document = new Document();字体时间 = null ; // 第 2 步 PdfWriter 编写器;尝试 { writer = PdfWriter.getInstance(document, new FileOutputStream(path));然后它制作了新文档并且我没有具有编辑功能的相同文档
    【解决方案3】:

    我按照这些思路做了一些事情,也许它会帮助其他人:

    ColumnText ct = new ColumnText(writer.getDirectContent());
    ct.setSimpleColumn(left,bottom,right,top);
    ct.setText(new Phrase("String"));
    ct.go();
    

    【讨论】:

    • 什么是 p ?你能解释一下吗?
    • 抱歉,应该是ct
    【解决方案4】:

    就我而言,只有这个解决方案可以正常工作。

    PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(FILE));
    

    添加方法

    private void addTextData(Document document, String text) {
            PdfContentByte cb = pdfWriter.getDirectContent();
            cb.beginText();
            try {
                BaseFont f_cn = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
                cb.setFontAndSize(f_cn, 40);
    
                float requiredX = 50;
                float requiredY = 50;
                Paint paint = new Paint();
                paint.setTextSize(40);
                Typeface typeface=Typeface.createFromAsset(getAssets(), "Helvetica.ttf");
                paint.setTypeface(typeface);
                paint.setColor(Color.BLACK);
                paint.setStyle(Paint.Style.FILL);
    
                Rect result = new Rect();
                paint.getTextBounds(text, 0, text.length(), result);
                Log.i("Text dimensions", "Width: "+result.width()+"-Height: "+result.height());
                float calculatedY = document.getPageSize().getHeight() - result.height() - requiredY;
                cb.setTextMatrix(requiredX, calculatedY);
                cb.showText(text);
                cb.endText();
            } catch (DocumentException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
    

    这肯定会对你有所帮助。

    【讨论】:

      【解决方案5】:

      希望对您有所帮助! 这是我的代码...

       Document document = new Document(PageSize.A4);
       PdfWriter writer = PdfWriter.getInstance(document, output);
       document.open();
      
       FixText("Add Your Text",400,700,writer,14);
       document.close();
      

      添加功能:

        private static void FixText(String text, int x, int y,PdfWriter writer,int size) {
          try {
              PdfContentByte cb = writer.getDirectContent();
              BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
              cb.saveState();
              cb.beginText();
              cb.moveText(x, y);
              cb.setFontAndSize(bf, size);
              cb.showText(text);
              cb.endText();
              cb.restoreState();
          } catch (DocumentException | IOException e) {
              e.printStackTrace();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        相关资源
        最近更新 更多