2

テンプレートに基づいて PDF ファイルを作成する必要があります。私の考えは、「text1」、「text2」などのプレースホルダーを使用してそのテンプレートを作成することです。このテンプレートは PDF ファイルに保存され、アプリ バンドルに配置されます。

実行時に、テンプレートは新しい PDF コンテキストにコピーされ、プレースホルダーを検索して、必要な実際のテキストに置き換えます。

テンプレートから新しい PDF を作成する方法と、PDF を検索する方法を示すこのページを見つけました。

問題は、新しい PDF の内容 (テキストまたは画像) をどのように置き換えるかということです。

4

2 に答える 2

3

置換テキストがテンプレートと同じ長さでない限り、それは実際にはそれほど単純ではありません。

置換がテンプレートと同じ長さである場合は、提供した最初のリンクで強調表示されている方法を使用してから、コアグラフィックを使用して、座標の正しい位置に置換を描画できます。

置換テキストが可変の場合は、テキストを古いpdfに挿入しようとしています。私の知る限り、libharuのような非常に低レベルのライブラリを使用しない限り、これは簡単ではありません。

これがあなたのための代替ソリューションであり、あなたのニーズに合うかもしれません、そして私が使っています。

まず、テンプレートをHTMLファイルとして保存します。置き換えるテキストのHTMLファイルにプレースホルダーを配置します。テンプレートをロードし、テキストを置き換えてから、次の方法を使用してPDFを取得します。

NSString *html = @"<html><head></head><body>all my awesome html</body></html>"

データへのPDFコンテキストを作成します。

NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData( pdfData, CGRectMake(0, 0, kPDFPageWidth, kPDFPageHeight), nil );

マークアップテキスト印刷フォーマッタを作成します。この場合、パラメータhtmlは完全に置き換えられたhtmlテンプレートページです。

 UIMarkupTextPrintFormatter *fmt = [[UIMarkupTextPrintFormatter alloc]
                                           initWithMarkupText:html];

マークアップフォーマッタは、アップルがhtmlを印刷するために提供するものですが、PDFを印刷するためにも使用できます。これを行うには、UIPrintPageRendererをサブクラス化する必要があります。したがって、サブクラスを作成したと仮定します。残りの呼び出しは次のようになります。以下にサブクラスを示します。

PDFPrintPageRenderer *renderer = [[PDFPrintPageRenderer alloc] init];


        // Render the html into a PDF
        [renderer addPrintFormatter:fmt startingAtPageAtIndex:0];
        [renderer printToPDF:1];

print to pdfは、印刷するページ数を取得する呼び出しです。これを事前に知らない場合は、すべてが見栄えがすることを確認するための最良の方法は、テンプレートをページに分割し、ページごとにこのプロセスを実行することです。とにかく、この呼び出しの後、あなたはあなたが以下で保存することができるpdfを持っているはずです。

    UIGraphicsEndPDFContext();

    //store the pdf
    [pdfData writeToFile:basePath atomically:YES];

これが私が使用するサブクラス化されたレンダラーです。

#define kPDFPageWidth 595
#define kPDFPageHeight 842

@interface PDFPrintPageRenderer : UIPrintPageRenderer
@property (nonatomic) BOOL generatingPDF;
@property (nonatomic) NSInteger heightCount;
- (NSData*) printToPDF:(NSInteger) height;
@end

実装

@implementation PDFPrintPageRenderer
@synthesize generatingPDF;
@synthesize heightCount;

- (CGRect) paperRect
{
    if (!generatingPDF)
        return [super paperRect];

    return UIGraphicsGetPDFContextBounds();
}

- (CGRect) printableRect
{
    if (!generatingPDF)
        return [super printableRect];

    return CGRectInset( self.paperRect, 5, 5 );
}

-(NSInteger) numberOfPages {
    if (!generatingPDF) {
        return [super numberOfPages];
    }

    return self.heightCount;
}

- (NSData*) printToPDF:(NSInteger) height
{
    self.heightCount = height;
    generatingPDF = YES;



    [self prepareForDrawingPages: NSMakeRange(0, self.numberOfPages)];

    CGRect bounds = UIGraphicsGetPDFContextBounds();


    for ( int i = 0 ; i < self.numberOfPages; i++ )
    {
        UIGraphicsBeginPDFPage();

        [self drawPageAtIndex: i inRect: bounds];

    }


    generatingPDF = NO;

    return nil;
}

@end

ご不明な点がある場合、または役に立った場合、または役に立たなかった場合はお知らせください。

于 2012-09-26T07:21:12.413 に答える
-1

それが可能だ。置き換えたいテキストの画像を取得することもできます。

2つのテキストがあるように-

text1 = pdf 内の実際のテキスト text2 = text1 を置き換えて pdf に入れたいテキスト

次に、text2 の imageview を取得し、text1 の画像の代わりにそのテキストの画像を設定します。まず、text1 を検索して、そのテキストの画像を取得する必要があります。その場合、text1 の画像を text2 に置き換えることができるのはあなただけです。もう 1 つ、テキストを直接変更できないようにする必要があります。そのテキストの画像を取得する必要があり、画像を置き換えることしかできません。

もう1つのことは、cgpointの助けを借りてdrwaingで正確なポイントを使用できるpdfの画像でそのテキストをキャッチすることです. したがって、x 座標と y 座標の助けを借りて、置き換えたいテキストをキャッチできます。

于 2012-09-26T06:03:57.170 に答える