作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的代码将 PDF 文件中的所有页面复制到一个新文件中,并在第一页的顶部插入一个带有红色边框的矩形,其中包含一个短文本。
如果我不移动它,顶部会留下一个缺口(这里放大了很多,字体大小只有8):
但是,如果我将矩形向上移动经验值 4 :
iText.Kernel.Geom.Rectangle pageSize = firstPage.GetCropBox().MoveUp(4);
顶部会有一个完美的匹配:
private static void RegisterDocument(PdfDocument pdfDocument, string registration)
{
// Magic value to close gap between top of page and top of rectangle with the registration.
const float moveUp = 4F;
Document document = new Document(pdfDocument, new PageSize(PageSize.A4));
PdfPage firstPage = document.GetPdfDocument().GetFirstPage();
Paragraph paragraph = new Paragraph(registration).AddStyle(RegistrationStyle());
iText.Kernel.Geom.Rectangle pageSize = firstPage.GetCropBox().MoveUp(moveUp);
LayoutContext layoutContext = new LayoutContext(new LayoutArea(1, pageSize));
IRenderer renderer = paragraph.CreateRendererSubTree();
renderer.SetParent(document.GetRenderer()).Layout(layoutContext);
Canvas canvas = new Canvas(new PdfCanvas(firstPage, true), pageSize);
canvas.Add(paragraph);
document.Close();
}
public static void RegisterPdf(string sourceFilename, string targetFilename, string registration)
{
if (registration.Length > 0)
{
// Open source and target PDF files.
PdfDocument sourcePdf = new PdfDocument(new PdfReader(sourceFilename));
PdfDocument targetPdf = new PdfDocument(new PdfWriter(targetFilename));
// Copy all pages from source PDF to target PDF.
sourcePdf.CopyPagesTo(1, sourcePdf.GetNumberOfPages(), targetPdf);
// Add registration to page 1 of target and save the document.
RegisterDocument(targetPdf, registration);
// Close the files.
sourcePdf.Close();
targetPdf.Close();
}
}
private static Style RegistrationStyle()
{
// Fixed design values for font and rectangle.
PdfFont font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
const float fontSize = 8F;
const float rightPadding = 3F;
TextAlignment textAlignment = TextAlignment.RIGHT;
iText.Kernel.Colors.Color borderColor = ColorConstants.RED;
iText.Kernel.Colors.Color fillColor = ColorConstants.WHITE;
const float borderWidth = 0.7F;
Style style = new Style()
.SetFont(font)
.SetFontSize(fontSize)
.SetPaddingRight(rightPadding)
.SetTextAlignment(textAlignment)
.SetBackgroundColor(fillColor)
.SetBorder(new SolidBorder(borderColor, borderWidth));
return style;
}
最佳答案
你想知道
I dislike magic numbers in code so, my question is: Why 4? What expression would reveal this value of 4?
Paragraph
的默认上边距值。工作类(class):
public override T1 GetDefaultProperty<T1>(int property) {
switch (property) {
case Property.LEADING: {
return (T1)(Object)new Leading(Leading.MULTIPLIED, childElements.Count == 1 && childElements[0] is Image ?
1 : 1.35f);
}
case Property.FIRST_LINE_INDENT: {
return (T1)(Object)0f;
}
case Property.MARGIN_TOP:
case Property.MARGIN_BOTTOM: {
return (T1)(Object)UnitValue.CreatePointValue(4f);
}
case Property.TAB_DEFAULT: {
return (T1)(Object)50f;
}
default: {
return base.GetDefaultProperty<T1>(property);
}
}
}
(iText 布局
Paragraph 方法)
public static void RegisterPdfImproved(string sourceFilename, string targetFilename, string registration)
{
using (PdfDocument pdf = new PdfDocument(new PdfReader(sourceFilename), new PdfWriter(targetFilename)))
using (Document document = new Document(pdf))
{
document.SetMargins(0, 0, 0, 0);
Paragraph paragraph = new Paragraph(registration)
.AddStyle(RegistrationStyle())
.SetMarginTop(0);
document.Add(paragraph);
}
}
没有任何魔法值,你现在得到
关于c# - Canvas 的 .MoveUp 使用什么值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64972425/
下面的代码将 PDF 文件中的所有页面复制到一个新文件中,并在第一页的顶部插入一个带有红色边框的矩形,其中包含一个短文本。 如果我不移动它,顶部会留下一个缺口(这里放大了很多,字体大小只有8): 但是
它很丑,但我找不到更好的地方来放置上移和下移按钮。你有什么建议? 最佳答案 我会说删除它们并使其可拖放:) 当然这对用户来说不是那么直观,但也许你可以有一个标签,说明你可以拖动它们来移动它们。 关于c
在我的应用程序中,我有一个注册表单,其中包含一些文本字段(电子邮件、密码等...),当我开始在这些文本字段中的某处键入内容时(显示键盘),我的 View 向上移动,然后我'我看不到我的文本字段中输入的
我是一名优秀的程序员,十分优秀!