Ios 将多个图像转换为具有多个页面的pdf格式
在我的应用程序中,有一个包含HTML内容的WebView。内容在WebView中为3页。 现在我想转换PDF格式的WebView内容。我已经从WebView内容创建了3个图像。现在我想用这3张图片创建pdf。每幅图片应为一页PDF格式。但它会导致单页图像。所以当我打印时,内容就被切断了。 我用这个,Ios 将多个图像转换为具有多个页面的pdf格式,ios,pdf-generation,Ios,Pdf Generation,在我的应用程序中,有一个包含HTML内容的WebView。内容在WebView中为3页。 现在我想转换PDF格式的WebView内容。我已经从WebView内容创建了3个图像。现在我想用这3张图片创建pdf。每幅图片应为一页PDF格式。但它会导致单页图像。所以当我打印时,内容就被切断了。 我用这个, CGSize pageSize = CGSizeMake(612, 2324); NSString *fileName = @"Demo.pdf"; NSArray *paths = NSSearc
CGSize pageSize = CGSizeMake(612, 2324);
NSString *fileName = @"Demo.pdf";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);
// Mark the beginning of a new page.
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil);
double currentHeight = 0.0;
for (int index = 1; index <= imageName ; index++)
{
NSString *pngPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", index]];
UIImage *pngImage = [UIImage imageWithContentsOfFile:pngPath];
[pngImage drawInRect:CGRectMake(0, currentHeight, pageSize.width, pngImage.size.height)];
currentHeight += pngImage.size.height;
}
UIGraphicsEndPDFContext();
cgsizepagesize=CGSizeMake(6122324);
NSString*fileName=@“Demo.pdf”;
NSArray*Path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);
NSString*documentsDirectory=[paths objectAtIndex:0];
NSString*pdfFileName=[DocumentsDirectoryStringByAppendingPathComponent:fileName];
UIGraphicsBeginPDFContextToFile(pdfFileName、CGRectZero、nil);
//标记新页面的开头。
uigraphicsbeginpdffpagewithinfo(CGRectMake(0,0,pageSize.width,pageSize.height),nil);
双电流高度=0.0;
对于(intindex=1;indexcgsizepagesize=CGSizeMake)(6122324);
NSString*fileName=@“Demo.pdf”;
NSArray*Path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);
NSString*documentsDirectory=[paths objectAtIndex:0];
NSString*pdfFileName=[DocumentsDirectoryStringByAppendingPathComponent:fileName];
UIGraphicsBeginPDFContextToFile(pdfFileName、CGRectZero、nil);
双电流高度=0.0;
for(int index=1;index/*for call方法*/
[self-createPdfWithName:@“sam”数组:[NSArray arrayWithObjects:[UIImage ImageName:@“01.png”],[UIImage ImageName:@“02.png”],nil]];
/*创建新的Pdf*/
-(NSString*)createPdfWithName:(NSString*)名称数组:(NSArray*)图像
{
NSArray*Path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);
NSString*docspath=[path objectAtIndex:0];
NSString*PdfielName=[docspath stringByAppendingPathComponent:[NSString stringWithFormat:@“%@.pdf”,name]];
UIGraphicsBeginPDFContextToFile(pdfFileName、CGRectZero、nil);
对于(int index=0;index)您是否试图将所有内容都放在一页上?关于代码,我唯一能看到的“错误”是页面的初始高度(2324)可能与图像的高度总和断开连接。您使用pngImage.size.height
迭代currentHeight
,其总计可能不超过2324。除此之外,使用我自己的PNG文件,您的代码可以工作。但是,在我的情况下,第三页(因为其高度为960像素)部分被切断。您好,欢迎来到stackoverflow,谢谢您的回答。除了发布一段代码,您能否简单解释一下您解决了什么问题以及如何解决?这将帮助将来发现此问题的人更好地理解此问题以及如何处理此问题。
CGSize pageSize = CGSizeMake(612, 2324);
NSString *fileName = @"Demo.pdf";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);
double currentHeight = 0.0;
for (int index = 1; index <= imageName ; index++)
{
NSString *pngPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", index]];
UIImage *pngImage = [UIImage imageWithContentsOfFile:pngPath];
// TODO: See Here
// Mark the beginning of a new page.
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pngImage.size.height), nil);
[pngImage drawInRect:CGRectMake(0, currentHeight, pageSize.width, pngImage.size.height)];
//currentHeight += pngImage.size.height;
}
UIGraphicsEndPDFContext();
/*For call method*/
[self createPdfWithName:@"sam" array:[NSArray arrayWithObjects:[UIImage imageNamed:@"01.png"],[UIImage imageNamed:@"02.png"], nil]];
/*Create New Pdf*/
- (NSString *)createPdfWithName: (NSString *)name array:(NSArray*)images
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docspath = [paths objectAtIndex:0];
NSString *pdfFileName = [docspath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.pdf",name]];
UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);
for (int index = 0; index <[images count] ; index++)
{
UIImage *pngImage=[images objectAtIndex:index];;
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, (pngImage.size.width), (pngImage.size.height)), nil);
[pngImage drawInRect:CGRectMake(0, 0, (pngImage.size.width), (pngImage.size.height))];
}
UIGraphicsEndPDFContext();
return pdfFileName;
}
func createPDFS(arrImages: [UIImage]) -> NSData? {
var pageHeight = 0.0
var pageWidth = 0.0
for img in arrImages
{
pageHeight = pageHeight+Double(img.size.height)
if Double(img.size.width) > pageWidth
{
pageWidth = Double(img.size.width)
}
}
let pdfData = NSMutableData()
let pdfConsumer = CGDataConsumer(data: pdfData as CFMutableData)!
var mediaBox = CGRect.init(x: 0, y: 0, width: pageWidth, height: pageHeight)
let pdfContext = CGContext(consumer: pdfConsumer, mediaBox: &mediaBox, nil)!
for img in arrImages
{
var mediaBox2 = CGRect.init(x: 0, y: 0, width: img.size.width, height: img.size.height)
pdfContext.beginPage(mediaBox: &mediaBox2)
pdfContext.draw(img.cgImage!, in: CGRect.init(x: 0.0, y: 0, width: pageWidth, height: Double(img.size.height)))
pdfContext.endPage()
}
return pdfData
}