如何使用 syncfusion pdf creator 创建多页 PDF?
How to create multi page PDF using syncfusion pdf creator?
我正在尝试使用 syncfusion pdf 包创建 pdf 文档。目前我可以制作单页 pdf,但我得到的数据将转到多页。如何识别所提供数据的长度并创建多个页面以将数据添加到 PDF
我的代码
Future<void> _createPDFAndDownload(String? dataToAdd, int? fileName) async {
final PdfDocument document = PdfDocument();
PdfPage page = document.pages.add();
document.pageSettings.size = PdfPageSize.a4;
final PdfPageTemplateElement headerTemplate =
PdfPageTemplateElement(const Rect.fromLTWH(0, 0, 515, 50));
headerTemplate.graphics.drawString(
'Management', PdfStandardFont(PdfFontFamily.helvetica, 12),
bounds: const Rect.fromLTWH(200, 15, 200, 20));
document.template.top = headerTemplate;
PdfFont font = PdfStandardFont(PdfFontFamily.helvetica, 12);
page.graphics.drawString(
dataToAdd!,
font,
bounds: Rect.fromLTWH(
0, 0, page.getClientSize().width, page.getClientSize().height),
);
PdfSecurity security = document.security;
//Specifies encryption algorithm and key size
security.algorithm = PdfEncryptionAlgorithm.rc4x128Bit;
security.userPassword = 'password';
Size pageSize = page.getClientSize();
Size waterMarkSize = font.measureString('Management');
PdfGraphics graphics = page.graphics;
double x = pageSize.width / 2;
double y = pageSize.height / 2;
graphics.save();
graphics.translateTransform(x, y);
graphics.setTransparency(0.25);
graphics.rotateTransform(-40);
graphics.drawString('Management', font,
pen: PdfPen(PdfColor(255, 0, 0)),
brush: PdfBrushes.blue,
bounds: Rect.fromLTWH(
-waterMarkSize.width / 2,
-waterMarkSize.height / 2,
waterMarkSize.width,
waterMarkSize.height));
graphics.restore();
List<int> bytes = document.save();
final folderName = "Management";
final subdirectory = "Docs";
final _fileName = fileName.toString();
final path = Directory("storage/emulated/0/$folderName/");
final path2 = Directory("storage/emulated/0/$folderName/$subdirectory/");
File fileDef =
File("storage/emulated/0/$folderName//$subdirectory/$_fileName.pdf");
var status = await Permission.storage.status;
if (!status.isGranted) {
await Permission.storage.request();
}
if ((await path.exists())) {
await fileDef.writeAsBytes(bytes, flush: true);
showToast("File Location " + path2.path);
} else {
await path.create();
await path2.create();
fileDef.writeAsBytes(bytes, flush: true);
showToast("File Location " + path2.path);
}
document.dispose();
}
dataToAdd 将有跨越第一页的数据我想创建多页添加到它
我可以使用以下代码获取多页 pdf
Future<void> _createPDFAndDownload(String? dataToAdd, int? fileName) async {
final PdfDocument document = PdfDocument();
final PdfPage page = document.pages.add();
final PdfLayoutResult? layoutResult = PdfTextElement(
text: dataToAdd!,
font: PdfStandardFont(PdfFontFamily.helvetica, 12),
brush: PdfSolidBrush(PdfColor(0, 0, 0)))
.draw(
page: page,
bounds: Rect.fromLTWH(
0, 0, page.getClientSize().width, page.getClientSize().height),
format: PdfLayoutFormat(
layoutType: PdfLayoutType.paginate,
));
}
我正在尝试使用 syncfusion pdf 包创建 pdf 文档。目前我可以制作单页 pdf,但我得到的数据将转到多页。如何识别所提供数据的长度并创建多个页面以将数据添加到 PDF
我的代码
Future<void> _createPDFAndDownload(String? dataToAdd, int? fileName) async {
final PdfDocument document = PdfDocument();
PdfPage page = document.pages.add();
document.pageSettings.size = PdfPageSize.a4;
final PdfPageTemplateElement headerTemplate =
PdfPageTemplateElement(const Rect.fromLTWH(0, 0, 515, 50));
headerTemplate.graphics.drawString(
'Management', PdfStandardFont(PdfFontFamily.helvetica, 12),
bounds: const Rect.fromLTWH(200, 15, 200, 20));
document.template.top = headerTemplate;
PdfFont font = PdfStandardFont(PdfFontFamily.helvetica, 12);
page.graphics.drawString(
dataToAdd!,
font,
bounds: Rect.fromLTWH(
0, 0, page.getClientSize().width, page.getClientSize().height),
);
PdfSecurity security = document.security;
//Specifies encryption algorithm and key size
security.algorithm = PdfEncryptionAlgorithm.rc4x128Bit;
security.userPassword = 'password';
Size pageSize = page.getClientSize();
Size waterMarkSize = font.measureString('Management');
PdfGraphics graphics = page.graphics;
double x = pageSize.width / 2;
double y = pageSize.height / 2;
graphics.save();
graphics.translateTransform(x, y);
graphics.setTransparency(0.25);
graphics.rotateTransform(-40);
graphics.drawString('Management', font,
pen: PdfPen(PdfColor(255, 0, 0)),
brush: PdfBrushes.blue,
bounds: Rect.fromLTWH(
-waterMarkSize.width / 2,
-waterMarkSize.height / 2,
waterMarkSize.width,
waterMarkSize.height));
graphics.restore();
List<int> bytes = document.save();
final folderName = "Management";
final subdirectory = "Docs";
final _fileName = fileName.toString();
final path = Directory("storage/emulated/0/$folderName/");
final path2 = Directory("storage/emulated/0/$folderName/$subdirectory/");
File fileDef =
File("storage/emulated/0/$folderName//$subdirectory/$_fileName.pdf");
var status = await Permission.storage.status;
if (!status.isGranted) {
await Permission.storage.request();
}
if ((await path.exists())) {
await fileDef.writeAsBytes(bytes, flush: true);
showToast("File Location " + path2.path);
} else {
await path.create();
await path2.create();
fileDef.writeAsBytes(bytes, flush: true);
showToast("File Location " + path2.path);
}
document.dispose();
}
dataToAdd 将有跨越第一页的数据我想创建多页添加到它
我可以使用以下代码获取多页 pdf
Future<void> _createPDFAndDownload(String? dataToAdd, int? fileName) async {
final PdfDocument document = PdfDocument();
final PdfPage page = document.pages.add();
final PdfLayoutResult? layoutResult = PdfTextElement(
text: dataToAdd!,
font: PdfStandardFont(PdfFontFamily.helvetica, 12),
brush: PdfSolidBrush(PdfColor(0, 0, 0)))
.draw(
page: page,
bounds: Rect.fromLTWH(
0, 0, page.getClientSize().width, page.getClientSize().height),
format: PdfLayoutFormat(
layoutType: PdfLayoutType.paginate,
));
}