日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

制作PDF文件全攻略

發(fā)布時間:2023/12/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 制作PDF文件全攻略 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前 言
麗水市汽車運輸集團有限公司信息中心 茍安廷
PDF文件是目前比較流行的電子文檔格式,在辦公自動化(OA)等軟件的開發(fā)中,經(jīng)常要用到該格式,但介紹如何制作PDF格式文件的資料非常少,在網(wǎng)上搜來搜去,都轉(zhuǎn)貼的是同一段“暴力”破解的方法,代碼片斷如下:

StreamWriter pPDF=new StreamWriter(filePath);

ArrayList xRefs=new ArrayList();

float yPos =0f;

long streamStart=0;

long streamEnd=0;

long streamLen =0;

string strPDFMessage=null;

//PDF文檔頭信息

strPDFMessage="%PDF-1.1\n";

ConvertToByteAndAddtoStream(strPDFMessage);



xRefs.Add(mPDF.Length);

strPDFMessage="1 0 obj\n";

ConvertToByteAndAddtoStream(strPDFMessage);

strPDFMessage="<< /Length 2 0 R >>\n";

ConvertToByteAndAddtoStream(strPDFMessage);

strPDFMessage="stream\n";

ConvertToByteAndAddtoStream(strPDFMessage);

……

看了上面的制作辦法,我眼鏡都摔壞了三幅,如果用上面這樣原始的辦法能制作出滿意的PDF文件,那一定是天才所為。后來,我從一個網(wǎng)站(網(wǎng)址:http://itextsharp.sourceforge.net/index.html)中看到了專門制作PDF文件的控件的介紹,暗喜之余,立馬下載試驗,果然非常輕松地制作出了想要的PDF文件,因為網(wǎng)站為英文,內(nèi)容又多,讀起來非常費力,在解決了自己的問題后,看到許多網(wǎng)友還在為PDF文件制作而郁悶,遂決定將該內(nèi)容翻譯為中文,由于本人英語水平一般,許多地方又晦澀難懂,故翻譯質(zhì)量不是很滿意,敬請斧正,但大部分能看懂。本文的目的一是解決部分網(wǎng)友的燃眉之急,二是拋磚引玉,如果哪位仁兄愿意將該網(wǎng)站中的內(nèi)容準(zhǔn)確翻譯出來,則是天下之大幸。

要用本文的方法生成PDF文件,需要兩個控件:itextsharp.dll和ICSharpCode.SharpZipLib.dll,由于示例代碼實在太多,我將代碼全部整理出來,放在另外一個文件“示例代碼.doc”中,所有這些資源,我均放在了本人的ftp站點(ftp://202.107.251.26)上的“Pdf文件制作全攻略”文件夾中(文件夾中另外兩個rar壓縮文件為兩個控件的源代碼,供大家學(xué)習(xí)研究使用),你可以到這里下載相應(yīng)的資源,或者直接到原網(wǎng)站下載。

為便于調(diào)試和敘述,所有例子均為DOS控制臺程序,windows程序使用方法完全一樣,按照下面的步驟創(chuàng)建一個可調(diào)試的項目:

1、 打開VS2003;

2、 單擊菜單“文件”→“新建”→“項目”,在項目類型中選擇“Visual C#項目”,在模板中選擇“控制臺應(yīng)用程序”,輸入文件名稱如“MakePdf”,指定好存放路徑,然后點確定按鈕;

3、 在“解決方案資源管理器”中右鍵單擊“引用”,從彈出的菜單中選擇“添加引用”,在“.NET”選項夾中選擇“瀏覽”,添加前面提到的兩個應(yīng)用,如下圖:


4、 在代碼窗口頂部添加兩個引用:

using iTextSharp.text;

using iTextSharp.text.pdf;

至此,準(zhǔn)備工作完畢。



第一部分 iText的簡單應(yīng)用
第一章 創(chuàng)建一個Document
利用iText五步創(chuàng)建一個PDF文件:helloword。

第一步,創(chuàng)建一個 iTextSharp.text.Document對象的實例:

Document document = new Document();

第二步,為該Document創(chuàng)建一個Writer實例:

PdfWriter.getInstance(document, new FileStream("Chap0101.pdf", FileMode.Create));

第三步,打開當(dāng)前Document

document.Open();

第四步,為當(dāng)前Document添加內(nèi)容:

document.Add(new Paragraph("Hello World"));

第五步,關(guān)閉Document

document.Close();

完整的代碼見示例代碼0101。

在例中,不難看出,制作一個PDF文件是非常簡單的。

注:如果你將例中“document.Add(new Paragraph("Hello World"));”中的字符串“Hello Word”換成中文,如“這是我的第一個PDF文件”,產(chǎn)生的結(jié)果一定讓你大失所望,因為生成的PDF文件中并沒有將中文顯示出來,不要擔(dān)心,在第9章中要專門講解字體問題,中文顯示也就迎刃而解了,如果不能正確顯示中文,也就沒有必要翻譯本文了。

下面對這幾步做詳細介紹。

第一步 創(chuàng)建一個Document實例:
iTextSharp.text.Document-object共有三個構(gòu)造函數(shù):

public Document();

public Document(Rectangle pageSize);

public Document(Rectangle pageSize,

int marginLeft,

int marginRight,

int marginTop,

int marginBottom);

第一個構(gòu)造函數(shù)以A4頁面作為參數(shù)調(diào)用第二個構(gòu)造函數(shù),第二個構(gòu)造函數(shù)以每邊36磅頁邊距為參數(shù)調(diào)用第三個構(gòu)造函數(shù)

u 頁面尺寸:

你可以通過指定的顏色和大小創(chuàng)建你自己的頁面,示例代碼0102創(chuàng)建一個細長的淺黃色背景的頁面:

Rectangle pageSize = new Rectangle(144, 720);

pageSize.BackgroundColor = new Color(0xFF, 0xFF, 0xDE);

Document document = new Document(pageSize);

通常,你不必創(chuàng)建這樣的頁面,而可以從下面頁面尺寸中選擇:

A0-A10, LEGAL, LETTER, HALFLETTER, _11x17, LEDGER, NOTE, B0-B5, ARCH_A-ARCH_E, FLSA 和 FLSE

大多數(shù)情況下使用縱向頁面,如果希望使用橫向頁面,你只須使用rotate()函數(shù):

Document document = new Document(PageSize.A4.rotate());

詳細代碼見示例代碼0103。

u 頁邊距:

當(dāng)創(chuàng)建一個文件時,你還可以定義上、下、左、右頁邊距:

Document document = new Document(PageSize.A5, 36, 72, 108, 180);

在示例代碼0104中你可以看到該文檔有一個0.5英寸的左邊距和1英寸的右邊距,上邊距為1.5英寸,下邊距為2.5英寸。

說明:

當(dāng)創(chuàng)建一個矩形或設(shè)置邊距時,你可能希望知道該用什么度量單位:厘米、英寸或象素,事實上,默認的度量系統(tǒng)以排版單位磅為基礎(chǔ)得出其他單位的近似值,如1英寸=72磅,如果你想在A4頁面的PDF中創(chuàng)建一個矩形,你需要計算以下數(shù)據(jù):

21 厘米 / 2.54 = 8.2677 英寸

8.2677英寸* 72 = 595 磅

29.7 厘米 / 2.54 = 11.6929 英寸

11.6929英寸* 72 = 842 磅

默認邊距為36磅即半英寸。

如果你修改了頁面尺寸,僅僅影響到下一頁,如果你修改了頁邊距,則影響到全部,故慎用。

關(guān)于頁面的初始值,請參考第三步。

第二步 創(chuàng)建Writer實例
一旦創(chuàng)建了document,我們可以創(chuàng)建該文檔的多個Writer的實例,所有這些Writer實例均繼承自抽象類“iTextSharp.text.DocWriter”。

同時還有另外一種情況,你可以用iTextSharp.text.pdf.PdfWriter產(chǎn)生文檔PDF文件,如果你想創(chuàng)建一個TeX文檔,你可以使用iTextSharp.text.TeX.TeXWriter包。

Writer類的構(gòu)造函數(shù)是私有的,你只能通過下面的方法創(chuàng)建一個實例:

public static xxxWriter getInstance(Document document, Stream os);(xxx 是 Pdf 或 Xml)

你可以通過下面的方法創(chuàng)建一個實例:

PdfWriter writer = PdfWriter.getInstance(document, new FileStream("Chap01xx.pdf"));

但是你幾乎永遠不會用到Writer實例(除非你想創(chuàng)建高級PDF或者希望用一些非常特殊的函數(shù),如ViewerPreferences 或 Encryption)。所以通過下面的辦法得到實例已經(jīng)足夠了: PdfWriter.getInstance(document, new FileStream("Chap01xx.pdf"));

在第一步中創(chuàng)建一個文檔時,第一個參數(shù)意義不大,第二個參數(shù)可以是任何一種流,到目前為止我們一直使用System.IO.FileStream將Document寫入文件中,示例代碼0105用到了System.IO.MemoryStream(這不是一個獨立的例子,你必須在Servlet Engine中測試這些代碼。

第三步 打開Document
u 摘要

在你寫入任何實際數(shù)據(jù)之前,你可能希望通過以下幾種方法寫入一些關(guān)于本文檔的摘要:

public boolean addTitle(String title)

public boolean addSubject(String subject)

public boolean addKeywords(String keywords)

public boolean addAuthor(String author)

public boolean addCreator(String creator)

public boolean addProducer()

public boolean addCreationDate()

public boolean addHeader(String name, String content)

你可以選擇自己的標(biāo)題、主題、關(guān)鍵字、作者、創(chuàng)建程序,但以下產(chǎn)品信息將始終被添加:iTextSharp (或者iTextSharp的引用)和創(chuàng)建時間(實際上這兩種方法是自動調(diào)用的)。

你還可以將自定義的名稱添加為“報頭信息”,但是這對于PdfWriter沒有任何作用,如果看看實例代碼0101產(chǎn)生的pdf文件的“文檔屬性”,我們可以看到僅僅有PDF創(chuàng)建程序和產(chǎn)品日期,而示例代碼0106的“文檔屬性”框中有更多的信息。



打開document前要做的事:

你只能在Open方法調(diào)用之前添加摘要,這是iText開發(fā)工具提供的一個選擇。

在HTML中,報頭信息被放在文檔前面報頭標(biāo)識中間,調(diào)用Open方法將導(dǎo)致報頭信息寫入流,因而在Document被打開后無法更改這些數(shù)據(jù)。

PDF報頭信息不包括摘要,看起來有類似于:

%PDF-1.2

該行顯示生成的文檔是一個版本為1.2的PDF格式的文件,在PDF中,摘要保存在PdfInfo對象中,當(dāng)文檔關(guān)閉時已經(jīng)寫入PdfWriter中了,因此,沒有關(guān)于為什么不能修改庫來滿足任何時候添加或更改摘要的技術(shù)原因

u 頁面初始化

Open方法在不同的Witer中同時會產(chǎn)生初始化事件,舉例來說,如果你需要一個水印或者頁眉頁角對象出現(xiàn)在文檔第一頁的開始處,你需要在打開文檔前添加這些,同樣的用于設(shè)置該文檔其他頁水印、頁眉、頁角、頁數(shù)和尺寸。

當(dāng)調(diào)用下列方法:

public bool setPageSize(Rectangle pageSize)

public bool Add(Watermark watermark)

public void removeWatermark()

setting Header property

public void resetHeader()

setting Footer property

public void resetFooter()

public void resetPageCount()

setting PageCount property

產(chǎn)生的結(jié)果只能在下一個新頁中看到(當(dāng)在本頁調(diào)用初始化方法時),代碼見示例代碼0107,你必須要準(zhǔn)備一張名為watermark.jpg的圖片,如下圖:


u 閱讀器參數(shù):

你可以通過下面的辦法為PDF文件指定一些閱讀器 (如Adobe Reader) 參數(shù):

public void setViewerPreferences(int preferences)

在示例代碼0108中,指定了下面一些參數(shù):

writerA.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft);

writerB.setViewerPreferences(PdfWriter.HideMenubar | PdfWriter.HideToolbar);

writerC.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft | PdfWriter.PageModeFullScreen | PdfWriter.NonFullScreenPageModeUseThumbs);

正如你所看到的,參數(shù)可以使用以下一些常量:

l 文件被打開時,頁面布局用到下面的其中一個 :

PdfWriter.PageLayoutSinglePage – 同時只顯示一個頁面
PdfWriter.PageLayoutOneColumn –單列顯示
PdfWriter.PageLayoutTwoColumnLeft –雙列顯示,奇數(shù)頁在左
PdfWriter.PageLayoutTwoColumnRight -雙列顯示,奇數(shù)頁在右
l 文件打開時,頁面模式用到下面其中之一:

PdfWriter.PageModeUseNone – 既不顯示大鋼也不顯示縮略圖
PdfWriter.PageModeUseOutlines – 顯示大綱
PdfWriter.PageModeUseThumbs – 顯示縮略圖
PdfWriter.PageModeFullScreen – 全屏模式,沒有菜單、windows控件或者其他任何windows可見控件
l PdfWriter.HideToolbar – 當(dāng)文檔激活時,是否隱藏閱讀程序(如Adobe Reader)的工具條

l PdfWriter.HideMenubar -當(dāng)文檔激活時,是否隱藏閱讀程序的菜單.

l PdfWriter.HideWindowUI -當(dāng)文檔激活時,是否隱藏閱讀程序的界面元素,如滾動條、導(dǎo)航條等,而僅僅保留文檔顯示

l PdfWriter.FitWindow – 是否調(diào)整文檔窗口尺寸以適合顯示第一頁。

l PdfWriter.CenterWindow – 是否將文檔窗口放到屏幕中央

l 在全屏模式下,指定如何顯示界面元素(選擇一個)

PdfWriter.NonFullScreenPageModeUseNone -既不顯示大鋼也不顯示縮略圖
PdfWriter.NonFullScreenPageModeUseOutlines – 顯示大鋼
PdfWriter.NonFullScreenPageModeUseThumbs – 顯示縮略圖
說明:你只能在類PdfWriter中調(diào)用這些方法。

u 加密

打開文檔之前還要做的一件事情就是加密(如果你希望該文檔加密),要達到這個目的,你可以使用下面的方法:

public void setEncryption(boolean strength, String userPassword, String ownerPassword, int permissions);

strength 是下面兩個常量之一:
PdfWriter.STRENGTH40BITS: 40 位
PdfWriter.STRENGTH128BITS: 128位 (Acrobat Reader 5.0及以上版本支持)
UserPassword和ownerPassword 可以為空或零長度, 這種情況下, ownerPassword 將被隨機的字符串代替
Permissions 為下列常量之一:
PdfWriter.AllowPrinting
PdfWriter.AllowModifyContents
PdfWriter.AllowCopy
PdfWriter.AllowModifyAnnotations
PdfWriter.AllowFillIn
PdfWriter.AllowScreenReaders
PdfWriter.AllowAssembly
PdfWriter.AllowDegradedPrinting
該功能參見示例代碼0109和示例代碼0110。

writer.setEncryption(PdfWriter.STRENGTH40BITS, null, null, PdfWriter.AllowCopy);

示例代碼0109產(chǎn)生的文件能夠被打開而無須密碼,但用戶不能打印、修改本文檔。

writer.setEncryption(PdfWriter.STRENGTH128BITS, "userpass", "ownerpass", PdfWriter.AllowCopy | PdfWriter.AllowPrinting);

打你試圖打開示例代碼0110產(chǎn)生的文件時,將要求輸入密碼('userpass'),因為添加了AllowPrinting參數(shù),你可以打印該文檔而不會發(fā)生任何問題。

第四步 添加內(nèi)容
在解釋第一步到第三步的不同示例中,你可能已經(jīng)遇到了一些對象如Phrase, Paragraph等 在接下來的幾章中,所有這些問題都將得到詳細解釋。

有時你可能想一個writer故意忽略document產(chǎn)生的行為,如示例代碼0111:

當(dāng)我們創(chuàng)建了兩個writer: writerA 和 writerB:

PdfWriter writerA = PdfWriter.getInstance(document, new FileStream("Chap0111a.pdf", FileMode.Create));

PdfWriter writerB = PdfWriter.getInstance(document, new FileStream("Chap0111b.pdf", FileMode.Create));

我們可以創(chuàng)建兩個有細微差別的文檔:

writerA.Pause();

document.add(new Paragraph("This paragraph will only be added to Chap0111b.pdf, not to Chap0111a.pdf"));

writerA.resume();

你可以比較文件: Chap0111a.pdf和Chap0111b.pdf的區(qū)別

第五步,關(guān)閉 document
關(guān)閉 document 非常重要, 因為它將關(guān)閉正在運行的Writer并將內(nèi)容寫入文件,該方法在最后被調(diào)用,你應(yīng)該總是要關(guān)閉文檔。

高級話題:閱讀PDF文件

該部分內(nèi)容介紹了iText只能產(chǎn)生PDF格式的文件而不能解析PDF格式文件,不再翻譯。

第二章 塊、短句和段落

塊(Chunk)是能被添加到文檔的文本的最小單位,塊可以用于構(gòu)建其他基礎(chǔ)元素如短句、段落、錨點等,塊是一個有確定字體的字符串,要添加塊到文檔中時,其他所有布局變量均要被定義。下面一行中,我們創(chuàng)建了一個內(nèi)容為“hello World”、紅色、斜體、COURIER字體、尺寸20的一個塊:

Chunk chunk = new Chunk("Hello world", FontFactory.getFont(FontFactory.COURIER, 20, Font.ITALIC, new Color(255, 0, 0)));

u 典型字體1:

在本指南中,除了第九章外(你可以在這里學(xué)會使用其他字體),我們將始終使用典型字體1,這些是不同的典型字體1:

· Courier (該字體定寬)

· Helvetica

· Times Roman

· Symbol

· ZapfDingbats



u 下劃線/刪除線

如果你希望一些塊有下劃線或刪除線,你可以通過改變字體風(fēng)格簡單做到:

Chunk chunk1 = new Chunk("This text is underlined", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.UNDERLINE));

Chunk chunk2 = new Chunk("This font is of type ITALIC | STRIKETHRU", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.ITALIC | Font.STRIKETHRU));

u 上標(biāo)/下標(biāo)

在塊中有幾個方法可以調(diào)用,其中大部分將在接下來的章節(jié)中介紹,本章中只介紹一個方法 setTextRise(float f). 你可以使用該方法在上標(biāo)或下標(biāo)中寫塊。

u 塊的背景

如果你想改變塊的背景,你可以使用方法setBackground(Color color). 這將在塊文本的下面添加一個彩色矩形:

ck.setBackground(new Color(0xFF, 0xFF, 0x00));

在示例代碼0101中,你可以概覽典型字體1和一個使用setTextRise, setBackground等方法的的例子。

短句
短句(Phrases)是一系列以特定間距(兩行之間的距離)作為參數(shù)的塊,一個短句有一個主字體,但短句中的一些塊具有不同于主字體的字體,你有更多的選擇去創(chuàng)建短句,一些具體使用參見代碼0202。



u 古希臘語

因為古希臘語經(jīng)常使用,在類Phrase的構(gòu)造函數(shù)中有一個特征:將一個字符串作為參數(shù)(如果你想避免這種情況,你只能使用塊工作而不能使用字符串),正如你在示例代碼0203中看到的,這個特征自動地將913至937(除903)和945至969(古希臘的ASCII值)范圍內(nèi)的所有字體改為希臘符號。

u 非主要性

與其說這是一個特征,不如說是一個缺陷,但無論如何,這使創(chuàng)建一個非主要性的短句或段落成為可能,這將產(chǎn)生一個由下向上書寫的臨時作用(參見示例代碼0204)。如果你想在一頁中將一些位置移動到上面時可能有用。

說明,當(dāng)你穿越上邊屆時無法檢查,也沒有辦法讓你回到前一頁。

段落
段落是一系列塊和(或)短句。同短句一樣,段落有確定的間距。用戶還可以指定縮排;在邊和(或)右邊保留一定空白,段落可以左對齊、右對齊和居中對齊。添加到文檔中的每一個段落將自動另起一行。有幾種辦法建立一個段落,如:

Paragraph p1 = new Paragraph(new Chunk("This is my first paragraph.", FontFactory.getFont(FontFactory.HELVETICA, 12)));

Paragraph p2 = new Paragraph(new Phrase("This is my second paragraph.", FontFactory.getFont(FontFactory.HELVETICA, 12)));

Paragraph p3 = new Paragraph("This is my third paragraph.", FontFactory.getFont(FontFactory.HELVETICA, 12));

所有有些對象將被添加到段落中:

p1.add("you can add strings, "); p1.add(new Chunk("you can add chunks ")); p1.add(new Phrase("or you can add phrases."));

說明:一個段落有一個且僅有一個間距,如果你添加了一個不同字體的短句或塊,原來的間距仍然有效,你可以通過SetLeading來改變間距,但是段落中所有內(nèi)容將使用新的中的間距。見示例代碼0205。

u 保持段落的整體性

在示例代碼0206中,我們使用了setKeepTogether(true)方法來試圖將一個段落放在同一頁中,該方法并不是始終有效,舉個例子,第一段不能剛好在一頁中,于是被分成了兩部分。第二段被放置在第二頁,但第三段順沿到了第三頁上。

字體的延續(xù)
你應(yīng)該掌握字體延續(xù)的一些規(guī)則,這些規(guī)則的應(yīng)用見示例代碼0207,當(dāng)我們將一些內(nèi)容用指定的字體(非默認字體)創(chuàng)建一個短句或者段落后再添加更多內(nèi)容時,初始對象的字體風(fēng)格將被延續(xù),請看“Hello 1!”和“Hello 2”:

Phrase myPhrase = new Phrase("Hello 2! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD));

myPhrase.Add(new Phrase("some other font ", new Font(Font.HELVETICA, 8, Font.ITALIC)));

myPhrase.Add(new Phrase("This is the end of the sentence.\n", new Font(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC)));

document.Add(myPhrase);

我們由Times New Roman 粗體字開始,添加一些文本使用Helvetica字體而不指定風(fēng)格,我們發(fā)現(xiàn)文本被改變成了粗體,當(dāng)我們再加一些文本使用Times New Roman字體和斜體風(fēng)格,結(jié)果變成了粗斜體。

如果我們使用FontFactory來創(chuàng)建字體,字體風(fēng)格不會被延續(xù),因為FontFactory使用了另外的技術(shù)構(gòu)建一個字體:

myPhrase = new Phrase("Hello 1bis! ", FontFactory.getFont(FontFactory.TIMES_NEW_ROMAN, 8, Font.BOLD));

myPhrase.Add(new Phrase("some other font ", FontFactory.getFont(FontFactory.HELVETICA, 8, Font.ITALIC)));

myPhrase.Add(new Phrase("This is the end of the sentence.\n", FontFactory.getFont(FontFactory.TIMES_NEW_ROMAN, 8, Font.ITALIC)));

document.Add(myPhrase);

在上面的代碼中,使用Helvetica字體的文本風(fēng)字體沒有指定(既不是粗體也不是斜體)。采用Times New Roman的額外文本僅僅顯示為斜體。

你也看到我們添加了一個段落,添加該段落就如同一個短句。

Paragraph myParagraph = new Paragraph("Hello 1! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD));

myParagraph.Add(new Paragraph("This is the end of the sentence.",FontFactory.getFont(new Font.TIMES_NEW_ROMAN, 8)));

document.Add(myParagraph);

你可以不這樣做,但將失去字體風(fēng)格的延續(xù),首先不用任何字體創(chuàng)建段落(例中我們僅僅給字體出間距為1.5倍),然后添加內(nèi)容的不同部分。



myParagraph = new Paragraph(12);

myParagraph.Add(new Paragraph("Hello 3! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD)));

myParagraph.Add(new Paragraph("This is the end of the sentence.", new Font(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC)));

document.Add(myParagraph);

如果你使用了Phrase對象,你同樣會失去字體風(fēng)格的延續(xù):

myPhrase = new Phrase(12);

myPhrase.Add(new Phrase("Hello 4! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD)));

myPhrase.Add(new Phrase("This is the end of the sentence.", newFont(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC)));

document.Add(myPhrase);

u 更改分割符

通常,當(dāng)文本不能放在一行時,文本將被分割成不同的部分,iText首先會查找分割符,如果沒有找到,文本將在行尾被截斷。有一些預(yù)定的分割符如“ ”空格和“-”連字符,但是你可以使用setSplitCharacter方法來覆蓋這些默認值。在示例代碼0208中,你可以看到當(dāng)?shù)竭_行尾時一個塊是如何被分割的。然后分隔符被改成點“.”,該行在該字符處被分割。

第三章 錨點、列表和注釋
錨點
我們都知道HTML中的超文本鏈接,當(dāng)我們點擊某些語句,你能夠跳轉(zhuǎn)到網(wǎng)上的其他頁。在PDF中也可以實現(xiàn)這種功能。事實上,在第十一章整個章節(jié)中有關(guān)于PDF鏈接的介紹,但這是iText的更高級的應(yīng)用,本章中我們處理簡單的iText。

如果你想在文檔中添加一個外部鏈接(例如使用URL鏈接到WEB上的其他文檔),你可以簡單地使用Anchor對象,它派生于Phrase對象,使用方法相同。只有兩種額外方法定義兩種額外變量:setName和 setReference。

外部鏈接示例:

Anchor anchor = new Anchor("website", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.UNDERLINE, new Color(0, 0, 255)));

anchor.Reference = "http://itextsharp.sourceforge.net";

anchor.Name = "website";

如果你想添加內(nèi)部鏈接,你需要選擇該鏈接不同的名稱,就象你相位在HTML中利用名稱作為錨點一樣。為達到該目的,你需要添加一個“#”。

內(nèi)部鏈接示例:

Anchor anchor1 = new Anchor("This is an internal link");

anchor1.Name = "link1";

Anchor anchor2 = new Anchor("Click here to jump to the internal link");

anchor.Reference = "#link1";

這兩個鏈接的例子請見示例代碼0301。

列表
通過類List 和ListItem,你可以添加列表到PDF文件中,對于列表你還可以選擇是否排序。

排序列表示例:

List list = new List(true, 20);

list.Add(new ListItem("First line"));

list.Add(new ListItem("The second line is longer to see what happens once the end of the line is reached. Will it start on a new line?"));

list.Add(new ListItem("Third line"));

結(jié)果如下:

First line
The second line is longer to see what happens once the end of the line is reached. Will it start on a new line?
Third line
不排序示例如下:

List overview = new List(false, 10);

overview.Add(new ListItem("This is an item"));

overview.Add("This is another item");

結(jié)果如下:

This is an item
This is another item
你可以通過setListSymbol方法更改列表符號:

// 用字符串作為列表符號

list1.ListSymbol = "*";

// 用Chunk 作為列表符號(包含“&#8226;”字符)

list2.ListSymbol = new Chunk("\u2022", FontFactory.getFont(FontFactory.HELVETICA, 20));

//用圖片作為列表符號

list3.ListSymbol = new Chunk(Image.getInstance("myBullet.gif"), 0, 0);

還可以使用setIndentationLeft和setIndentationRight方法設(shè)置縮排,列表符號的縮排在構(gòu)造函數(shù)中設(shè)置。更多的例子請參見示例代碼0302。

注釋
iText支持不同風(fēng)格的注釋。

u 文本注釋:

你可以添加一小段文本到你的文檔中,但它并非文檔內(nèi)容的一部分,注釋有標(biāo)題和內(nèi)容:

Annotation a = new Annotation(

"authors",

"Maybe it's because I wanted to be an author myself that I wrote iText.");

u 外部鏈接注釋:

你需要指定一個可點擊的矩形和一個字符串(URL描述)或URL對象:

Annotation annot = new Annotation(100f, 700f, 200f, 800f, new URL("http://www.lowagie.com"));

Annotation annot = new Annotation(100f, 700f, 200f, 800f, "http://www.lowagie.com");

u 外部PDF文件鏈接注釋:

你需要指定一個可點擊的矩形和一個字符串(文件名稱)和目的文件或頁碼。

Annotation annot = new Annotation(100f, 700f, 200f, 800f, "other.pdf", "mark");

Annotation annot = new Annotation(100f, 700f, 200f, 800f, "other.pdf", 2);

u 指定行為鏈接注釋

你需要指定一個可點擊的矩形和一個指定的行為:

Annotation annot = new Annotation(100f, 700f, 200f, 800f, PdfAction.FIRSTPAGE);

u 應(yīng)用程序鏈接注釋:

你需要指定一個可點擊的矩形和一個應(yīng)用程序:

Annotation annot = new Annotation(300f, 700f, 400f, 800f, "C://winnt/notepad.exe", null, null, null);

我們無須在頁面上指定一個位置,iText會內(nèi)部處理。你能夠看到iText添加文本注釋在頁面上當(dāng)前位置下面,第一個在段后第一行下面,第二個在短句結(jié)束處的下面。

所有其他注釋需要指定想匹配的矩形區(qū)域,在示例代碼0304中,我們畫了一些正方形(使用的函數(shù)將在第十章中介紹),為每個正方形添加了一些鏈接注釋。

第四章 頁眉頁腳、章節(jié)、區(qū)域和繪圖對象
使用在第三至第五章中描述的大量簡單iText對象可以避免更多的高級話題(第九至十二章),緊記這些簡單對象限制的功能,大量復(fù)雜的功能在第三部分。

頁眉頁腳
HeaderFooter對象可以于為文檔每頁添加頁眉和頁腳。這樣一個頁眉或頁腳包含一個標(biāo)準(zhǔn)的短句(如果需要)和當(dāng)前頁碼,如果你需要更多復(fù)雜的頁眉和頁腳(使用表格或者第幾頁共幾頁),請閱讀第十二章。

在示例代碼0401中,你可以看到我們首先添加了一個包含頁碼沒有任何邊框的頁腳。

HeaderFooter footer = new HeaderFooter(new Phrase("This is page: "), true);

footer.Border = Rectangle.NO_BORDER;

document.Footer = footer

我們還可以使用下面的構(gòu)造函數(shù):

HeaderFooter footer = new HeaderFooter(new Phrase("This is page "), new Phrase("."));

構(gòu)造函數(shù)知道你希望添加一個頁碼和將其放置在兩個短句間,如果你只是設(shè)置一個HeaderFooter而不改變邊框,頁眉或頁腳的文本上下各有一條直線。

HeaderFooter header = new HeaderFooter(new Phrase("This is a header without a page number"), false);

document.Header = header;

章節(jié)和區(qū)域
在第十一章中將描述如何構(gòu)建一個樹的外觀,如果你只需要一個簡單的章節(jié)和(子)區(qū)域,你可以用Chapter對象和Section對象自動構(gòu)建一個樹:

Paragraph cTitle = new Paragraph("This is chapter 1", chapterFont);

Chapter chapter = new Chapter(cTitle, 1);

Paragraph sTitle = new Paragraph("This is section 1 in chapter 1", sectionFont);

Section section = chapter.addSection(sTitle, 1);

在示例代碼0402中,我們添加了一系列的章節(jié)和子區(qū)域,你可以看到完整的樹形,樹形結(jié)構(gòu)默認打開,如果你希望部分節(jié)點關(guān)閉,你必須使用用BookmarkOpen屬性其值為false,詳見示例代碼0403。

圖形
如果你想添加圖形,如直線、圓、幾何窗體,你應(yīng)該閱讀讀十章,但如果你只需要一些有限的功能,你可以使用Graphic對象

Graphic grx = new Graphic();

//添加一個矩形

grx.rectangle(100, 700, 100, 100);

// 添加一條斜線

grx.moveTo(100, 700);

grx.lineTo(200, 800);

// 將圖形顯示出來

grx.stroke();

document.Add(grx);

完整的代碼請見示例代碼0404,如果想看到全部的方法,請參見PdfContentByte對象API。

當(dāng)你想給頁面加一個邊框或者在文本當(dāng)前位置畫一條水平線時,圖形對象非常有用。下面的方法用指定的寬度、間距(如果需要)和顏色畫一個邊框。

public void setBorder(float linewidth, float extraSpace);

public void setBorder(float linewidth, float extraSpace, Color color);

下面的方法用指定的寬度(如果需要)和顏色畫一條水平線,線的長度是指定兩邊緣間可用面積的的百分比。

public void setHorizontalLine(float linewidth, float percentage)

public void setHorizontalLine(float linewidth, float percentage, Color color)

示例代碼5中,有一個離邊界5磅,線寬3磅的邊框,還有兩條水平線,一條為黑色,5磅寬,可用空間的100%,另外一條為紅色,線寬3磅,可用空間的80%。

第五章 表格
重點:如果你僅僅生成PDF文件(沒有XML、HTML、RTF……),使用類pdfPTable代替類Table更好。

一些簡單的表格
一個表格是包含單元格排列成矩陣的矩形區(qū)域。表格的距陣并不要求是m×n的,它可以有空洞或者單元格比單個的要大。

創(chuàng)建一個表格最通用的辦法是預(yù)先知道有幾行幾列:

public Table(int columns, int rows);

在示例代碼0501中,我們構(gòu)建了一個簡單的表:

Table aTable = new Table(2,2);

aTable.addCell("0.0");

aTable.addCell("0.1");

aTable.addCell("1.0");

aTable.addCell("1.1");

該表格有兩行兩列,單元格被自動添加,從第一行第一列開始,然后是第二列,當(dāng)一行滿后,下一單元格自動添加到下一行的第一列中。

也可以將單元格添加到表中指定的位置,如示例代碼0502,別了要添加System.Drawing.dll引用,以獲得Point對象,我們創(chuàng)建了一個4行4列的表格然后添加一些單元格到隨機的位置上:

Table aTable = new Table(4,4);

aTable.AutoFillEmptyCells = true;

aTable.addCell("2.2", new Point(2,2));

aTable.addCell("3.3", new Point(3,3));

aTable.addCell("2.1", new Point(2,1));

aTable.addCell("1.3", new Point(1,3));

你可以看到我們將AutoFillEmptyCells屬性設(shè)置為true,這將自動、默認的單元格布局填充空的單元格,如果我們忘記了這樣做(就象本例中第二個表格),將沒有額外的單元格添加,不包含任何單格的行也將被忽略,在本例中,第一行將不顯示,因為該行是空行。

經(jīng)常用數(shù)據(jù)庫查詢結(jié)果來填充表格,大多數(shù)情況下,你預(yù)先并不知道到底需要多少行,這就是為什么還有第二個構(gòu)造函數(shù)的原因:

public Table(int columns);

iText根據(jù)需要自動添加行,在示例代碼0503中,初始化了4行4列,當(dāng)我們添加第6行和第7行的單元格時,iText自動增加行數(shù)到7。

增加列數(shù)也是可能的,但是有點麻煩,它不能自動生成,你必須使用addColumns方法并設(shè)置列寬,詳見示例代碼0504。

一些表格參數(shù)
前面例子中的表格并不美觀,我們可以設(shè)置大量的參數(shù)來改變表格外觀。類Table和類Cell派生于類Rectangle,我們可以用大量典型的Rectangle方法,讓我們來看看示例代碼0505。

Table table = new Table(3);

table.BorderWidth = 1;

table.BorderColor = new Color(0, 0, 255);

table.Cellpadding = 5;

5. table.Cellspacing = 5;

Cell cell = new Cell("header");

cell.Header = true;

cell.Colspan = 3;

table.addCell(cell);

10. cell = new Cell("example cell with colspan 1 and rowspan 2");

cell.Rowspan = 2;

cell.BorderColor = new Color(255, 0, 0);

table.addCell(cell);

table.addCell("1.1");

15. table.addCell("2.1");

table.addCell("1.2");

table.addCell("2.2");

table.addCell("cell test1");

cell = new Cell("big cell");

20. cell.Rowspan = 2;

cell.Colspan = 2;

cell.BackgroundColor = new Color(0xC0, 0xC0, 0xC0);

table.addCell(cell);

table.addCell("cell test2");

25. document.Add(table);



u 單元格間距和填距

在第4行中,我們設(shè)置了表格的填距,就是單元格邊界和內(nèi)容間一定數(shù)量的空間,在前面的示例中,我們看到文本緊貼邊界,通過使用用特定的填距,就可以避免。

在第5行中,我們設(shè)置了表格的間距,就是單元格和表格邊界間的一定數(shù)量的空間,不同的單元格間使用了半數(shù)空間,具體代碼見示例代碼0506。

u 對齊方式

在示例代碼0506中,我們也改變了單元格“big cell”的對齊方式:

cell.HorizontalAlignment = Element.ALIGN_CENTER;

cell.VerticalAlignment = Element.ALIGN_MIDDLE;

注:不能總是相信垂直對齊方式。

u 邊框

如果我們象在第14行中那樣添加了一個單元格,將使用默認的單元格布局(默認的布局可以SetDefalut方法改變),如果我們使用了Cell對象,我們可以控制每一個單元格的布局。

在第2和第三中,我們設(shè)置整個表格的邊框?qū)挾群瓦吙蝾伾?#xff0c;我們在單元格上可以使用的方法,在12行中,每個單元格用“box”作為邊界繪制(就象在HTML中),但是示例代碼0507顯示,我們在PDF中有大量更多可能。

u 顏色

在第22行中,你也能定義單元格的背景色,在示例代碼0507中,我們不使用顏色只是用一定灰度填充。

u 行跨和列跨

最后,你也能設(shè)置單元格的行跨(11/20行)和列跨(8/21列)。通過這種方法可以將幾個單元格合并成一個大的單元格。

u 備注

第7行在PDF中沒有意義,用于生成HTML,在HTML中并不是總能產(chǎn)生同樣的布局,PDF表格有點象:



header

example cell with colspan 1 and rowspan 2
1.1
2.1

1.2
2.2

cell test1
big cell

cell test2





















u 表格分割

如果一個表格不能放在一頁中,將自動被分割,示例代碼0508顯示了當(dāng)一個表格到達頁邊時發(fā)生的情況,這將在下一節(jié)中解釋。

大表格
跨越幾頁的表格將自動被分割成不同的部分。示例代碼0509顯示了一個跨越多頁的報表。該報表有一個表頭,如果你希望這個表頭在每頁都出現(xiàn),你可以用endHeaders()方法標(biāo)記表頭區(qū)域的結(jié)束點,見示例代碼0510。

為做這樣的報表,建議設(shè)置單元格間距為0和僅使用指定的填距。

你可能已經(jīng)注意到了,當(dāng)一個表格被分割時,一些邊界好象丟失了。這是因為單元格在前一頁被完整地繪制了而不會傳遞給下一頁。

u 強行將一個表格或單元格布置到一頁上

有有些情況下,你可能希望避免單元格或者整個表被拆分成兩個部分,示例代碼0511差不多和示例代碼0508完全一樣,但我們設(shè)置了參數(shù)TableHasToFit為true,看看示例代碼0508和示例代碼0511結(jié)果區(qū)別。在示例代碼0512中我們修改了示例代碼0510的CellsHaveToFit屬性為true,比較兩個示例產(chǎn)生結(jié)果的區(qū)別。

內(nèi)存管理
當(dāng)我們添加一個對象到文檔時,該對象一有可能就寫入了輸出流,但當(dāng)創(chuàng)建一個表格時,該Table對象一直保存著,對于真正的大表格,這將成為一個問題。

同樣,當(dāng)你正寫一個HttpServletResponse對象到輸出流時,瀏覽器也可能超時。這就是為什么你自己用fitsPage()方法控制表分割是有用的,示例代碼0513告訴你如何做。

嵌套表格
有兩種方法嵌套表格,第一種是利用insertTable方法明確地將一個表格插入到另外一個表格,示例代碼0514顯示了通過插入到其他表格的辦法創(chuàng)建的5個表格。正如你看到的在前面兩個表中,所有空的單元格自動得到分割,因為改變了原來的表格。如果一個單元格不空,列跨度和(或)行跨度將自動調(diào)整到新的位置,頁面上第三個表格顯示所有原表中列的相關(guān)寬度都得到了保護,第四個表格顯示我們可以在插入了表格后添加其他單元格:該單元格自由地添加到下一個單元格中。最后是一個深度嵌套的表格。

當(dāng)你使用insertTable方法時,插入表的寬度百分比不會被考慮,如果你希望插入表僅占單元格的80%(這是默認的寬度百分比),你不得不在單元格中繞排,見示例代碼0515,這也是讓一個表結(jié)合其他數(shù)據(jù)存放在同一個單元格中的唯一辦法,見示例代碼0516。

備注:你只能將一個表格插入到列跨度和行跨度均為1的單元格中。

表格偏移
當(dāng)一個表格被添加到文檔之前,以當(dāng)前間距為準(zhǔn)的新行將被添加(如前一個插入對象的間距)。有時因為前一個插入對象和當(dāng)前表格間的間距過大或過小你并不希望這樣做,如果你想改變這個空間,你不得不設(shè)置表格偏移,如示例代碼0517。

表格的絕對位置
iTextSharp.text.Table是一個通過標(biāo)準(zhǔn)方法創(chuàng)建表格的相當(dāng)簡單的類,但有時你希望表格有一些特殊的行為,這種情況下你將使用更復(fù)雜的類com.lowagie.text.pdf.PdfPTable,示例代碼0518是一個非常簡單的例子,在第十章和十二章中將有一些更復(fù)雜的例子。

第六章 圖片
Image對象
如果你學(xué)習(xí)過API,你可能已經(jīng)注意到可以通過幾種構(gòu)造函數(shù)來創(chuàng)建圖片,本手冊中,我們將僅僅告訴你最簡單的解決方案,如訪問通過文件名或URL確定的圖片生成的Image對象。

public static Image getInstance(Uri url)

public static Image getInstance(string filename)

Image是一個抽象類,故得到實例的方法將判斷給出的圖片的類別(GIF、Jpeg、PNG……)并返回對象的類別Gif、Jpeg、Png……,一些圖片會被忽略,如果你想知道哪些圖片會被忽略,請查閱FAQ(http://www.lowagie.com/iText/faq.html#images)。

u 通過URL得到圖片實例

這是添加一個圖片最簡單的辦法,見示例代碼0601,我們添加了一個WMF、一個Gif、一個Jpeg和一個PNG圖片到文檔中,使用4個URL得到:

Image wmf = Image.getInstance(new URL("../examples/harbour.wmf"));

Image gif = Image.getInstance(new URL("../examples/vonnegut.gif"));

Image jpeg = Image.getInstance(new URL("../examples/myKids.jpg"));

Image png = Image.getInstance(new URL("../examples/hitchcock.png"));

備注:許多PDF庫在插入一個圖片前都將其解壓縮并轉(zhuǎn)換成位圖格式,下面是幾個我為什么不這樣做的原因:

這將導(dǎo)致PDF文件增大,這樣產(chǎn)生的PDF文件尺寸是不同圖片文件尺寸總和的數(shù)十倍。
面臨一個法律問題:LZW算法受專利保護,所以不允許使用這種算法來解壓縮GIF等文件。
u 通過文件名得到圖片實例

通過簡單地改變圖片引用路徑將示例代碼0601改成示例代碼0602:

Image gif = Image.getInstance("vonnegut.gif");

Image jpeg = Image.getInstance("myKids.jpg");

Image png = Image.getInstance("hitchcock.png");

同示例代碼0601的區(qū)別只是該圖象從本地獲取而已,另外一個例子見示例代碼0603。

圖片的位置
u 對齊方式

通過下面方法設(shè)置圖片的對齊方式:

Alignment = Image.RIGHT

Alignment = Image.MIDDLE

Alignment = Image.LEFT

參見示例代碼0604。

我們將Vonnegut的圖片放在右邊,小孩的圖片放在中間,hitchcock的圖片放在左邊。

u 圖片和文本

另外,你還可以指定文本相對圖片的環(huán)繞方式:

Alignment = Image.RIGHT | Image.TEXTWRAP

Alignment = Image.MIDDLE

Alignment = Image.LEFT | Image.UNDERLYING

見示例代碼0506,文字在Vonnegut圖片的左側(cè),并不在我小孩的圖處環(huán)繞,且排在Hitchcock圖片的上面。

說明:該功能尚有一些BUG。

u 絕對位置

當(dāng)制作PDF文件時,你可能用到該方法:

public void setAbsolutePosition(int absoluteX, int absoluteY)

將一個圖片放要頁面上一個絕對位置的代碼見示例代碼0606,我們在不同的坐標(biāo)處添加了兩幅圖片,這里使用給定的坐標(biāo)將圖片放在了左下角,通過將圖片的寬度和高度作為X和Y坐標(biāo)將設(shè)置第一個圖片,坐標(biāo)的2倍設(shè)置第二個圖片。

縮放和旋轉(zhuǎn)圖片
u 縮放

有幾種辦法可以縮放圖片:

public void scaleAbsolute(int newWidth, int newHeight)

public void scalePercent(int percent)

public void scalePercent(int percentX, int percentY)

public void scaleToFit(int fitWidth, int fitHeight)

小孩的圖片大小為194×202象素,如果你想讓圖片小一些,你可以通過scaleAbsolute(97, 101)進行縮放,使用scalePercent(50)也能到達同樣的效果。

還可以通過scaleAbsolute(194, 101)來減小,所以這些例子都放在了示例代碼0607中。

u 對分辨率的影響

如果一個圖片不經(jīng)任何縮放,其分辨率(resolution)為72,如果該圖片縮放比例為50%,則分辨率為144,如果有更低的縮放比,則分辨率將更大,因為象素相同但尺寸變得更小了。使用72/300=24%的比例放置一個300dpi的圖片,例:你用300dpi掃描了一個5×5英寸的圖片,圖片結(jié)果為1500×1500象素(5×300),當(dāng)你用24%(72/300=0.24)的比例將該圖片放置到PDF文件中時,PDF中的圖片將為5×5英寸1500X1500象素300dpi,該圖片將始終為1500X1500象素而不管尺寸如何。

u 旋轉(zhuǎn)

可以通過下面的方法旋轉(zhuǎn)圖片

public void setRotation(double r)

詳見示例代碼0608。

原始圖片數(shù)據(jù)
到目前為止,所有例子中使用的圖片均來自地本地磁盤或者某個網(wǎng)站,但也可能使用包含圖片信息的數(shù)組來得到圖片的實例:

public static Image getInstance(byte[] img)

該方法同前面方法的效果相同,返回一個新的Gif,Jpeg或者Png類別的Image對象。

在示例代碼0609中,我們添加一個從一個Jpeg文件中讀入到字節(jié)數(shù)組中的圖片,很明顯,使用其他getInstance方法得到實例更優(yōu)越,但這僅僅是一個例子,該getInstance方法在動態(tài)創(chuàng)建那些根本不存在的圖片時非常有用。

該例子也演示了如何創(chuàng)建和使用一個原始圖片。

public static Image getInstance(int width, int height, int components, int bpc, byte data[])

本例中創(chuàng)建了一個100×100象素的圖片,因為每個象素用RGB描述,所以圖片大小為100×100×3字節(jié)。

System.Drawing.Bitmap
示例代碼0610是一個比較高級的話題,理由如下:

首次使用到了System.Drawing.Bitmap類。該類在.net框架中,可以使用更多類型的圖片,如TIFF、GIF,而這些圖片在iText中均不支持,你可以檢查一下.net框架看看你需要的圖片格式是否得到支持。
前面的例子中,還有一些事情要注意:當(dāng)添加一個圖片時不會出現(xiàn)什么問題,文字始終浮于圖片上面,本例中,我們希望圖片浮在文字上面。這也是為什么我們將使用iTextSharp.text.pdf.PdfContentByte類的原因(見第十章)。
你將發(fā)現(xiàn)使用的圖片為透明的gif格式,你可以到http://itextsharp.sourceforge.net/examples/h.gif下載得到。
TIFF和CCITT
示例代碼0611也是一個比較高級的話題,例中轉(zhuǎn)換一個TIFF文件到PDF文件。

u 圖片遮罩

示例代碼0613在,我們創(chuàng)建了一個用作遮罩的圖片











3C









7E









E7









C3









C3









E7









7E









3C



















該圖片尺寸為8×8象素,每組一個字節(jié),使用makeMask()方法可以轉(zhuǎn)換成遮罩。

byte maskr[] = {(byte)0x3c, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xe7, (byte)0x7e, (byte)0x3c};

Image mask = Image.getInstance(8, 8, 1, 1, maskr);

mask.makeMask();

mask.setInvertMask(true);

我們可以用該遮罩直接遮住其他圖片的一部分。

PdfContentByte cb = writer.DirectContent;

Image image = Image.getInstance("vonnegut.gif");

image.ImageMask = mask;

或者我們將該遮罩用于模板遮罪中。

PdfContentByte cb = writer.DirectContent;

cb.setRGBColorFill(255, 0, 0);

cb.addImage(mask, mask.scaledWidth() * 8, 0, 0, mask.scaledHeight() * 8, 100, 400);

關(guān)于ContentByte對象更多信息請參見第十章。

圖片和其他對象
u 圖片在塊中

有時,可以方便地將圖片置于塊中,通過一定偏移將一個圖片置于塊中:

Chunk ck = new Chunk(img, 0, -5);

具體代碼見示例代碼0614,我們可以添加該特殊圖片塊到短句、表格等,本例中的圖片請到http://itextsharp.sourceforge.net/examples/pngnow.png下載。

u 圖片在表格中

你可以將圖片添加到單元格中,但有兩個副作用:

l 表格的寬度是確定,當(dāng)圖片超出單元格的寬度時,將自動縮小。

l 你不能進行文字繞排和為圖片添加下劃線。

參見示例代碼0615。

u 圖片鏈接注釋

如果你希望得到一個可點擊的圖片,或者想添加鏈接注釋到圖片上,你需要創(chuàng)建一個Annotation對象,并添加到圖片上,你不需要指定位置(你可以使用0,0,0,0),該位置會內(nèi)部更新以適合該圖片。

gif.Annotation = new Annotation(0, 0, 0, 0, "Chap1102b.pdf", 3);

jpeg.Annotation = new Annotation("picture", "These are my children", 0, 0, 0, 0);

參加示例代碼0616。

第二部分 其他文檔格式
第七章 XML和 (X)HTML
本章主要介紹了如何利用iText控件生成XLM文檔和(X)HTML文檔,但我們對這些并不感興趣,故只介紹本章中提到的將XML轉(zhuǎn)為PDF。

在第一章中,我們通過5步生產(chǎn)一個PDF文件,為了將一個XML文件轉(zhuǎn)換為PDF文件,只需重寫第3和第4步,第5步由解析器自動處理。

//第3步:創(chuàng)建一個解析器并設(shè)置文檔句柄:

iTextHandler h = new iTextHandler(document);

//第4步,轉(zhuǎn)換該文檔:

h.Parse("Chap0701.xml");

示例代碼見示例代碼0702

第八章 RTF文件
RTF包
RTF包是基于iText包擴展出來的,允許iText除生成PDF文件外還可以輸出RTF文件,除了一些在RTF包中不支持的特性外,大多數(shù)PDF文件特性都可以使用。

創(chuàng)建一個RTF文檔
創(chuàng)建一個RTF文檔和創(chuàng)建一個PDF文檔方法是一樣的,都是這基本的5步,唯一的區(qū)別是第2步中用RtfWriter代替了PdfWriter,見示例代碼0801。

第1步 創(chuàng)建一個the iTextSharp.text.Document對象的實例:

Document document = new Document();

第2步 創(chuàng)建一個document的RtfWriter將document寫入你選擇的輸出流:

RtfWriter.getInstance(document, new FileStream("Chap0801.rtf"), FileMode.Create);

第3步 打開document:

document.Open();

第4步 添加內(nèi)容到document

document.Add(new Paragraph("Hello World"));

第5步 關(guān)閉document

document.Close();

關(guān)于如何創(chuàng)建其他對象并添加到document中,請參見其他章節(jié)的內(nèi)容。

不支持的特性
水印
閱讀器參數(shù)
加密
內(nèi)嵌字體
塊間距
段落右縮排
列表右縮排
無圓點符號列表
嵌套表格
除JPEG和PNG的其他圖片
RTF中擴展的頁眉和頁腳
寫入RTF時無法在開始新頁前通過setHeader方法改變文檔的頁眉或頁腳,這里有兩個辦法來解決這個問題。

利用“Chapters”,添加一個新“chapter”到文檔前,使用setHeader或setFooter,你可以在不同的“Chapters”中使用不同的頁眉或頁腳,見示例代碼0802。
使用RtfHeaderFooters類。該類允許你設(shè)置4個頁眉或頁腳,并指定在哪頁出現(xiàn)。你當(dāng)然可以結(jié)合Chapter創(chuàng)建4個不同的頁眉或頁腳,見示例代碼0803。
u 使用RtfHeaderFooters類

第1步創(chuàng)建一個RtfHeaderFooters類:

RtfHeaderFooters headers = new RtfHeaderFooters();

第2步添加HeaderFooter對象

headers.Add(RtfHeaderFooters.LEFT_PAGES, new HeaderFooter(new Phrase("This header is only on left hand pages")));

headers.Add(RtfHeaderFooters.RIGHT_PAGES, new HeaderFooter(new Phrase("This header is only on right hand pages")));

第3步如同使用頁眉頁腳一樣使用RtfHeaderFooters

document.Header = headers;

使用RtfHeaderFooters.add(...)的常量:

FIRST_PAGE: 在你文檔的第一頁使用該頁眉或頁腳。你將使用rtfWriter.HasTitlePage = true來完成
LEFT_PAGES: 所有左邊頁均使用該頁眉或頁腳
RIGHT_PAGES: 所有右邊頁均使用該頁眉或頁腳
ALL_PAGES: 所有頁均使用該頁眉或頁腳,只有和FIRST_PAGE 結(jié)合使用才有意義。
有一件事非常重要:如果你使用LEFT_PAGES或者RIGHT_PAGES來設(shè)置頁眉或頁腳,再使用ALL_PAGES,頁眉和頁腳均不會起作用。

表格效果見示例代碼0804。

第三部分 iText的高級應(yīng)用
第九章 字體
本章原文講了許多字體的使用技巧,但就是沒有講如何使用中文,因此,意義不大,再說,如果不支持中文,前面的也就白翻譯了,因此,根據(jù)原文講到的一些知識,我摸索出漢字的使用方法,自己寫了本章內(nèi)容,應(yīng)該算是“原創(chuàng)”了吧^_^(哎呀!誰拿雞蛋扔我……)。

Windows中一般都是使用TrueType字體,每個中文版Windows操作系統(tǒng)均默認安裝了宋體、仿宋、黑體和楷體四種字體,你還可以安裝其他第三方字體,如安裝了Office 2000后,會自動安裝華文行楷等字體,比較奇怪的是,在PDF文件中插入了一種本計算機才有的字體,在打開PDF文件的計算機上雖然沒有該字體,但仍然能正常顯示!這有別于Word文件,Word文件將當(dāng)前計算機中沒有的字體一律用宋體代替,這大概是意外收獲吧。

字體文件一般保存在windir\Fonts目錄中,擴展名為TTF,還有擴展名為TTC的字體文件,也是TrueType字體,不過是一個集合,也就是里面有多種字體。下面列出windows2000簡體中文版四種標(biāo)準(zhǔn)字體的文件名稱:

SIMSUN.TTC:宋體和新宋體

SIMKAI.TTF:楷體

SIMHEI.TTF:黑體

SIMFANG.TTF:仿宋體

TrueType字體應(yīng)用
按下面的方法寫入黑體字文字,大小為32磅:

BaseFont bfHei = BaseFont.createFont(@"c:\winnt\fonts\SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

Font font = new Font(bfHei, 32);

String text = "這是黑體字測試!";

document.Add(new Paragraph(text, font));

不要管BaseFont.createFont方法第二、三個參數(shù)的意思,依葫蘆畫瓢就行了,第一個參數(shù)顯示就是字體文件存放的位置。

后面的代碼都非常好理解,不再贅述。

TruType字體集合的應(yīng)用
字體集合的使用同上面差不多,只是在在createFont方中要指定使用哪種字體。如:

BaseFont bfSun=BaseFont.createFont(@"c:\winnt\fonts\SIMSUN.TTC,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

font = new Font(bfSun, 16);

text = "這是字體集合中的新宋體測試!";

document.Add(new Paragraph(text, font));

不難看出,在使用BaseFont.createFont方法時,第一個參數(shù)@"c:\winnt\fonts\SIMSUN.TTC,1"中多了一個“,1”,表示使用序號為1字體,序號為0的字體為宋體。

畢竟我們不是做排版軟件,有了上面的辦法就基本上夠用了,真正很復(fù)雜的PDF文件制作,不妨做成XML文件(最簡單的辦法就是用Word排版,然后另存為web頁了),然后按第七章的辦法轉(zhuǎn)換。

代碼見示例代碼0901。

第十章 圖象和文本的絕對位置
pdfContentByte
到目前為止,我們已經(jīng)使用了簡單的iText,我們已經(jīng)添加了文本、圖片、段落、章節(jié)、列表、表格等,沒有涉及到布局問題。Itext分割文本到每頁中,并將每個單詞、句子、段落布置到頁面上,但有時我們并不需要這種自動格式,有時我們希望將一些圖象或者文本放置在某頁的指定位置,為實現(xiàn)該功能,我們將使用PdfContentByte類。

為代替第一章,僅用PdfWriter類的getInstance方法是不夠的,你必須真實地擁有一個PdfWriter對象,你可以通過在使用Writer對象中使用getDirectContent()方來得到該對象。例:

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));

PdfContentByte cb = writer.DirectContent;

說明:當(dāng)你添加高級對象(如表格)時,兩個PdfContentByte對象將被內(nèi)部使用:一個用于文本,一個用用于圖象(如邊界或單元格背景)。文本繪制浮于圖象的上面。

當(dāng)你通過getDirectContent()方法直接使用PdfContentByte對象時,你所添加的所有對象都將浮于文本和圖象。如果你想避免這種情況和希望添加內(nèi)容在圖象或文本的背后,你需要使用用getDirectContentUnder()方。

一句話,當(dāng)一頁完成時,4層的重疊遵照如下順序:

1、 通過getDirectContentUnder()得到的PdfContentByte

2、 包含圖象或高級對象的內(nèi)部PdfContentByte

3、 病文本或高級對象的內(nèi)部PdfContentByte

4、 通過getDirectContent()得到的PdfContentByte

簡單圖形
在示例代碼1001中,繪制了一些簡單圖形,我們使用了諸如moveTo和lineTo方法來在移動到頁面上當(dāng)前位置然后畫一條直線到其他位置。我們使用了諸如setLineWidth和setLineDash方法來改變直線的外觀,如:

cb.LineWidth = 10f;

cb.moveTo(100, 700);

cb.lineTo(200, 800);

cb.stroke();

說明:當(dāng)你改變諸如顏色、線寬等屬性時,只有你在調(diào)用stroke方法時才起作用。在例中繪制三角形時,我們設(shè)置顏色為綠色,在使用stroke方法前我們改變顏色為紅色,則繪制三角形的結(jié)果為為紅色而不是綠色,該例中還有矩形、圓等使用方法。

文本
當(dāng)你想將文本寫入ContentByte中時,你必須使用方法beginText()和endText,你也必須設(shè)置字體和尺寸。就象圖形示例中一樣,還有許多方法用于寫入和放置文本,但你最需要的是方法showTextAligned和方法showText配合setTextMatrix。

例1:

BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cb.beginText();

cb.setFontAndSize(bf, 12);

cb.showTextAligned(PdfContentByte.ALIGN_CENTER, text + "This text is centered", 250, 700, 0);

cb.endText();

例2:

BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);

cb.beginText();

cb.setFontAndSize(bf, 12);

cb.setTextMatrix(100, 400);

cb.showText("Text at position 100,400.");

cb.endText();

請參見示例代碼1002。

模板(Form xObjects)
當(dāng)我們在第四章討論頁眉和頁腳時,我們定義了一小塊添加到每一頁的信息,實際上,該小塊信息寫到了文件的每一個新頁上。這并不是最經(jīng)濟的解決方案,更好的辦法是將該信息作為一個Form Xobject僅在文檔中添加一次,在其可見位置重復(fù)出現(xiàn)。我達到該目的,我們將使用模板。

u 創(chuàng)建一個PdfTemplate

u 創(chuàng)建PdfTemplate的最好方法是調(diào)用PdfContentByte對象中的createTemplate方法:

PdfContentByte-object:

PdfTemplate template = cb.createTemplate(500, 200);

這樣,該模板的寬度為500,高度為200。

通過該模板我們可以做象PdfContentByte同樣的事情

template.moveTo(0, 200);

template.lineTo(500, 0);

template.stroke();

template.beginText();

BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);

template.setFontAndSize(bf, 12);

template.setTextMatrix(100, 100);

template.showText("Text at the position 100,100 (relative to the template!)");

template.endText();

u 添加一個模板到文檔

通過象下面一樣在絕對位置添加一個模板:

cb.addTemplate(template, 0, 400);

你還可以做一些有趣的事情,如縮放或旋轉(zhuǎn)他們:

//將模板旋轉(zhuǎn)90度

cb.addTemplate(template, 0, 1, -1, 0, 500, 200);

// 縮放模板為50%

cb.addTemplate(template, .5f, 0, 0, .5f, 100, 400);

//縮放模板為200%

cb.addTemplate(template, 2, 0, 0, 2, -200, 400);

具體演示見示例代碼1003。

u 第幾頁共幾頁

在一些情況下,你希望插入一些你在寫本頁時外殼無法知道的信息到文本中去,如:在一篇文檔的第一頁,你并不知道該文檔共有幾頁。只能在完成了整個文檔時才知道總的頁數(shù)。當(dāng)使用模板時,該問題就不存在了。在示例代碼0103中,我們在添加模板到ContentByte前添加了一些信息到模板中,這是沒有必要的。我們可以在任何時候添加信息到模板,因為iText添加Form Xobject是在PDF結(jié)束的地方(當(dāng)通過close方法關(guān)閉該文檔時調(diào)用)。示例代碼1004顯示了首先創(chuàng)建4頁然后添加總到頁數(shù),該例非常簡單和有用。

分欄
在本章以前,你已經(jīng)掌握了如何將文本放在一個絕對位置,這種情況下,我們要確定文本的開始坐標(biāo)。如果我們想知道文本的結(jié)束位置,我們得做一些計算工作。

現(xiàn)在我們要加一些文本到一個矩形框的內(nèi)部,希望文本到達右邊界時自動換行。超出矩形部分將不顯示,可以通過ColumnText類實現(xiàn)。

舉個例子:

為顯示一個指定的短句在坐標(biāo)(100, 300)和(200, 500)間的矩形內(nèi)居中,我們使用下面的代碼:

PdfContentByte cb = writer.DirectContent;

ColumnText ct = new ColumnText(cb);

ct.setSimpleColumn(phrase, 60, 300, 100, 500, 15, Element.ALIGN_CENTER);

ct.go();

通過查看示例代碼1005,你會立即發(fā)現(xiàn)通過該方法可以可以畫一些復(fù)雜的表格而無須Table對象。

另一個例子:

沒有必要一次性將文本全部添加進去,你可以先定義一個矩形,然后添加一些文本,最后用go方法顯示分欄。

PdfContentByte cb = writer.DirectContent;

ColumnText ct = new ColumnText(cb);

ct.setSim7pleColumn(60, 300, 100, 500, 15, Element.ALIGN_CENTER);

ct.addText(phrase1);

ct.addText(phrase2);

ct.addText(phrase3);

ct.go();

詳見示例代碼1006。

多欄

當(dāng)然,如果文本超出了矩形范圍,我們并不想丟失這些多出的文本,或許我們想將這些文本顯示到其他欄中。這就是為什么我們要查看go方法返回值的原因。如果返回標(biāo)識為“NO_MORE_COLUMN”,表示該欄中沒有足夠的空間存放該文本,如果所有的文本均顯示出來,標(biāo)識將為“NO_MORE_TEXT”。

請參見示例代碼1007。

不規(guī)則欄

定義一個非矩形的區(qū)域來顯示欄也是可能的,通過使用setColumns方法,我們?yōu)槲谋径x了一個左右邊界。

float[] left = {70,790, 70,60};

float[] right = {300,790, 300,700, 240,700, 240,590, 300,590, 300,106, 270,60};

ct.setColumns(left, right);

左邊界是一條直線,而右邊界是不規(guī)則的。該函數(shù)的結(jié)果可以導(dǎo)致一些非常有意思的布局,見示例代碼1008,本例中你將用到一個名為caesar_coin.jpg的圖片:


PdfTable
在第5章中,我們簡要地講述了PdfPTable對象,現(xiàn)在我們將討論該對象更多的的特性。

你可以用3種不同的方法創(chuàng)建PdfTable:

PdfPTable(float[] relativeWidths);

PdfPTable(int numColumns);

PdfPTable(PdfPTable table);

你可以給該表設(shè)置更多的參數(shù),如表寬度、列寬度、水平對齊方式等,你可以通過下面的辦法添加單元格:

public void addCell(PdfPCell cell);

public void addCell(PdfPTable table);

public void addCell(Phrase phrase);

public void addCell(String text);

除了單元格填距和和間距,這些方法同Table對象非常類似。這些參數(shù)對每個單元格個體進行了設(shè)置,當(dāng)然,你可以設(shè)置單元格的默認值,為改變單元格的默認值,使用getDefaultCell()和調(diào)用一個或更多的類PdfPCell的方法(你可以設(shè)置對齊方式、間距、邊框、顏色甚至最低高度)。

注:通過PdfPTable,你能改變一個單元格的列跨度,但不能改變行跨度!在PdfPTable內(nèi)部是一些獨立的行,要讓它支持行跨度更改需要對PdfPTable對象進行很大的調(diào)整,不要期望在近期內(nèi)實現(xiàn),你可以用嵌套表來解決這些問題。

你可以象第5章一樣將一個PdfPTable添加到當(dāng)前文檔中,但你也可以添加一個表在當(dāng)前頁中的絕對位置:

public float writeSelectedRows(int rowStart, int rowEnd, float xPos, float yPos, PdfContentByte canvas);

參數(shù)rowStart是你想開始的行的數(shù)目,參數(shù)rowEnd是你想顯示的最后的行(如果你想顯示所有的行,用-1),xPos和yPos是表格的坐標(biāo),canvas是一個PdfContentByte對象。在示例代碼1009中,我們添加了一個表在(100,600)處:

table.writeSelectedRows(0, -1, 100, 600, writer.DirectContent);

使用PdfPTable,你不能設(shè)置行跨度和(或)來跨度(怎么和上面的有點矛盾?)你可以使用嵌套表來解決,見示例代碼1010。

最后,示例代碼1011和示例代碼1012展示了PdfTable可以和templates 和 columns一起使用,在示例代碼1012中將用到cover.png圖片如下:


顏色(SpotColors)和圖案(Patterns)
顏色(spotcolors)的使用見示例代碼1013,示例代碼1014和示例代碼1015演示了圖案(patterns)的使用方法。

第十一章 本地和異地轉(zhuǎn)向、目標(biāo)和概要
本地轉(zhuǎn)向
有時你需要一個允許讀者從文檔的一個地方跳轉(zhuǎn)到另外一個地方的鏈接,你可以通過類Chunk的setLocalGoto 和setLocalDestination兩個方法實現(xiàn),例:

Chunk localgoto = new Chunk("this word", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.NORMAL, new Color(0, 0, 255))).setLocalGoto("test");

Chunk destination = new Chunk("local destination", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.NORMAL, new Color(0, 255, 0))).setLocalDestination("test");

見示例代碼1101。

異地轉(zhuǎn)向
在第3章中,我們演示了一個錨點如何轉(zhuǎn)向到其他URL,一個錨點通過不同的字體、風(fēng)格和顏色,可以包含不同的Chunks,在iText的高級應(yīng)用中,下面定義鏈接到URL的其他方法:

Chunk chunk = new Chunk("anchor", FontFactory.getFont(FontFactory.HELVETICA, 12)).setAnchor(new URL("http://www.lowagie.com/iText/"));

u 轉(zhuǎn)到PDF文檔中的指定位置

如果你在文檔中指定了一個目的地,你可以從另外一個文檔跳轉(zhuǎn)到這里,為實現(xiàn)該功能,你可以使用方法:

setRemoteGoto: Chunk chunk = new Chunk("jump", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.ITALIC)).setRemoteGoto("test.pdf", "test"));

test.pdf是另外一個pdf文件,”test”是該文件的一個目的地。

跳轉(zhuǎn)到另一個PDF文件指定頁

使用方法setRemoteGoto,用頁碼參數(shù)代替名稱參數(shù),可以非常容易地跳轉(zhuǎn)定另外一個文檔的指定頁:

chunk = new Chunk("jump", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.ITALIC)).setRemoteGoto("test.pdf", 3));

見示例代碼1102

u 啟動一個應(yīng)用程序

可以使用下面的方法啟動一個應(yīng)用程序:

public PdfAction(String application, String parameters, String operation, String defaultDir)

如果application為“c:/winnt/notepad.exe”(其余參數(shù)可以為null),你可以通過PDF文件中的鏈接來啟動記事本程序。

u 文件和URL

如果你想跳轉(zhuǎn)到其他文檔或URL,你需要通過下面的構(gòu)造函數(shù)之一創(chuàng)建一個:

PdfAction(String filename, String name);

PdfAction(String filename, int page);

PdfAction(URL url);

PdfAction(String url);

前面兩個構(gòu)造函數(shù)允許你跳轉(zhuǎn)到文件的指定位置或頁碼,后兩個構(gòu)造函數(shù)允許你跳轉(zhuǎn)到其他URL上。

其余部分略。

第十二章 頁面和表格事件
略。

轉(zhuǎn)載于:https://www.cnblogs.com/floatping/archive/2005/09/18/239113.html

總結(jié)

以上是生活随笔為你收集整理的制作PDF文件全攻略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

亚洲精品97 | 福利片免费看 | 三级av免费观看 | 免费观看久久久 | www麻豆视频 | 久久国产福利 | 国产精品毛片久久久久久久 | 四虎影视精品永久在线观看 | 精品国产一二三 | 午夜精品久久久久久久久久 | 国产综合婷婷 | 麻豆高清免费国产一区 | 日韩91精品 | 免费在线观看一区 | 色综合久久久网 | 在线观看免费色 | 国产一级精品视频 | 黄色成人在线观看 | 久久国产精彩视频 | 精品久久91| 在线观看国产v片 | 91大神精品视频 | 日韩在线播放av | 国产色视频网站 | 日本中文字幕一二区观 | 国产视频欧美视频 | 国产一区二区在线观看视频 | 欧美大片在线看免费观看 | 亚洲视频aaa | av资源免费看| 我爱av激情网 | 国内精品久久久久影院优 | 欧美精品一区二区三区四区在线 | 97国产| 国产一区二区三区免费在线 | 成人 亚洲 欧美 | 久久久久久看片 | 男女啪啪免费网站 | 日韩成人精品 | 中文字幕色婷婷在线视频 | 91禁在线观看 | 日韩欧美一级二级 | 天天干夜夜夜 | 色网免费观看 | 欧美色图30p | 五月婷婷六月丁香激情 | 不卡的一区二区三区 | 激情一区二区三区欧美 | 国产黑丝袜在线 | 欧美精品在线观看免费 | 国产尤物在线视频 | 日韩一区二区三区在线看 | 久久亚洲区 | 国产在线精品国自产拍影院 | 中国一级片视频 | 免费观看性生交大片3 | 高潮久久久久久 | 涩涩网站在线观看 | 区一区二区三区中文字幕 | 国产精品6 | 国产精品av电影 | 97视频免费看 | 91精品国自产在线观看欧美 | 国产区在线看 | av在线之家电影网站 | 国偷自产中文字幕亚洲手机在线 | 久久视频精品 | 国产精品久久久久久久毛片 | 日韩高清片| 91九色精品女同系列 | 日日干天天操 | 亚洲视频播放 | 久久黄色美女 | 天天操天 | 国产美女被啪进深处喷白浆视频 | 日韩av一区在线观看 | 天天草天天摸 | 欧美日韩国产一区二 | 久久九九影院 | 亚洲天天在线日亚洲洲精 | 色国产精品 | av中文字幕在线免费观看 | 91九色在线播放 | 亚洲 欧美 变态 国产 另类 | 欧美日韩一级视频 | 在线免费黄色片 | www.亚洲激情.com | 久久精品视频观看 | 91大神精品视频 | www.国产在线视频 | 亚洲成人黄色 | 国产不卡视频在线 | 亚洲成av人片在线观看 | 国产精品免费观看视频 | 精品极品在线 | 欧美三级高清 | 成人黄色毛片视频 | 日韩欧美国产视频 | 亚洲国产精品影院 | 99久久精品免费看国产 | 51久久夜色精品国产麻豆 | 亚洲一级黄色片 | 中文超碰字幕 | 亚洲欧美视频一区二区三区 | 久久男人中文字幕资源站 | 探花视频免费观看高清视频 | 国产成人精品电影久久久 | 成人aⅴ视频 | 国产999 | 精精国产xxxx视频在线播放 | 热久久免费视频精品 | 国产 欧美 日韩 | 中文字幕一区2区3区 | 美腿丝袜一区二区三区 | 国产女做a爱免费视频 | 91麻豆国产福利在线观看 | 91精品高清| 久久久精品一区二区三区 | 色狠狠综合天天综合综合 | 久久久久观看 | 日韩免费二区 | 嫩嫩影院理论片 | 日批视频国产 | 色噜噜狠狠色综合中国 | 操操操av | av在线进入 | 日韩精品中文字幕在线播放 | 狠狠地操 | 成人手机在线视频 | 亚洲免费婷婷 | 天天操天天射天天爱 | 欧美少妇xxxxxx | 高潮久久久久久久久 | 免费黄在线看 | 91av在线视频免费观看 | 99久久久国产精品免费99 | 国产人免费人成免费视频 | 丁香婷五月 | 一区二区三区免费网站 | 国产专区免费 | 91在线国内视频 | 亚州精品在线视频 | 香蕉色综合 | 高清av中文在线字幕观看1 | 91正在播放| 免费黄色在线网站 | 日韩二区三区 | 国产日韩三级 | 国产精品九九九九九九 | 四虎成人av | 97av精品 | 国产精品18久久久久久vr | 成人在线视频免费 | 99久久婷婷国产一区二区三区 | 一区二区三区四区五区在线 | 久久精品免费看 | 亚洲最新av网址 | 成人久久影院 | 午夜性福利 | 久久精品成人欧美大片古装 | 日韩中文字幕91 | 久久的色 | 国产精品久久免费看 | 国产高清久久久 | 一区二区成人国产精品 | 精品1区二区 | 国产中文字幕国产 | 日韩毛片在线免费观看 | 色视频 在线 | 精品亚洲一区二区 | 玖玖视频网 | 日韩av手机在线看 | 成人一级黄色片 | 国产123av| 国产亚洲一级高清 | 成人午夜黄色影院 | 天天操夜夜看 | 国产精品96久久久久久吹潮 | 视频在线一区 | 97视频在线看| 亚洲欧美视频在线观看 | 最近中文字幕免费视频 | 97国产超碰 | 国产第一福利网 | 91九色丨porny丨丰满6 | 亚洲国产成人精品在线 | 9999亚洲| 黄色的网站免费看 | av在线不卡观看 | 国产分类视频 | 69精品久久 | 日韩av不卡在线播放 | 精品爱爱 | 18岁免费看片 | 91丨精品丨蝌蚪丨白丝jk | 久 久久影院 | 超碰97国产精品人人cao | 在线中文日韩 | 日本精品视频一区 | av免费电影在线观看 | 国产精品12345 | 国产在线观看 | 天天操夜操视频 | 日韩视频在线不卡 | 国产欧美精品在线观看 | 日韩精品久久一区二区 | 午夜日b视频 | 久久精品激情 | av成人动漫 | 欧美韩国日本在线 | 视频一区久久 | 国产精品九九久久久久久久 | 天天草天天色 | 成人午夜电影在线播放 | 天天操天天干天天插 | 黄网站色视频免费观看 | 麻豆成人在线观看 | www日日夜夜 | 亚洲电影av在线 | 深夜免费福利视频 | 毛片网免费 | 国产精品女人网站 | www五月天婷婷 | 国产亚洲一区二区在线观看 | 国产在线免费av | 久久久久成人免费 | 欧美日韩中文在线视频 | 黄色在线看网站 | 黄色大片日本免费大片 | 日韩精品免费在线观看视频 | 99re国产| 国产精品18久久久久久不卡孕妇 | 精品久久久久久久久久久院品网 | 最近中文字幕 | 午夜精品成人一区二区三区 | 国产精品18久久久久久首页狼 | 国产黄色片久久久 | 丁香5月婷婷 | 免费看的黄色 | 日韩在线观看不卡 | 91久久久久久久 | 国产精品毛片网 | 91大神精品视频在线观看 | 国产高清视频在线播放 | 麻豆免费视频网站 | 国产 欧美 日产久久 | 一区二区三区电影 | 天天射日| 国产99免费 | 99久久精品免费看国产免费软件 | 精品久久久久一区二区国产 | 黄色av免费| 92精品国产成人观看免费 | 国产在线精品二区 | 999成人 | 中文字幕黄色网 | 免费看一及片 | 韩日电影在线 | 毛片二区| 伊人天堂网 | 成人av在线网| 高清一区二区 | 操操操夜夜操 | av青草 | 不卡电影免费在线播放一区 | 久久久美女 | 日韩在线观看不卡 | 96亚洲精品久久久蜜桃 | 久久一及片 | 日韩高清免费电影 | 麻豆91精品视频 | 国产欧美精品一区二区三区 | 在线看欧美 | 91精品视屏| 成人久久毛片 | 久久久国产成人 | 国产在线观看一区 | 一区二区三区在线观看免费视频 | 97碰在线 | 国产精品免费人成网站 | 久草视频在线免费 | 91在线你懂的 | 在线观看免费版高清版 | 婷婷激情av | 青青看片| 成年人视频在线观看免费 | 久久免费黄色网址 | 亚洲无吗天堂 | 国产精品久久久久久久久久久久久久 | 成人福利av | 福利视频第一页 | 黄色影院在线免费观看 | 国产区在线视频 | 国产超碰在线 | 国产成人精品a | 国产精品久久久久久影院 | 色网站在线免费观看 | 国产在线观看免费观看 | 国产精品成久久久久三级 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 国产日本亚洲高清 | 一区二区亚洲精品 | 欧美一级日韩三级 | 99视频偷窥在线精品国自产拍 | 国产精品久久久网站 | 国产区网址 | 免费在线a | 视频在线一区二区三区 | 日韩电影久久 | 一区二区三区高清不卡 | 久久久国产一区二区三区四区小说 | 国内精品在线一区 | 国产精品免费看久久久8精臀av | 国产精品久久99综合免费观看尤物 | 久草视频在线观 | 九九九九九九精品任你躁 | 狠狠色丁香 | 日韩精品中文字幕在线观看 | 久久精品专区 | 久久久国际精品 | 国产精品大尺度 | 久草精品视频在线观看 | 99国产精品 | 欧美一级片在线免费观看 | 91黄色在线观看 | 天天操一操 | 亚洲国内精品在线 | 久久刺激视频 | 久久夜色精品国产欧美乱 | 久久免费视频这里只有精品 | 色99之美女主播在线视频 | 国产一区二区三区在线免费观看 | 国产精品久久久网站 | 91免费网站在线观看 | 狠狠狠狠狠狠狠 | 色网站免费在线观看 | 中文字幕麻豆 | 日韩高清不卡一区二区三区 | 中文字幕日韩伦理 | 91在线porny国产在线看 | 免费福利在线 | 久草免费看 | 一级黄色毛片 | 91看片淫黄大片在线播放 | 久久久国产一区二区三区 | 亚洲高清色综合 | 欧美射射射 | 日韩在线免费不卡 | 中文字幕麻豆 | 人人干网 | 国产99久久 | 欧美日韩在线视频一区 | 成人亚洲综合 | 香蕉视频在线免费 | 在线观看韩国av | 国产一区二区三区在线免费观看 | 不卡的av在线播放 | 69性欧美| 国产午夜麻豆影院在线观看 | 99精品视频中文字幕 | 亚洲高清视频在线观看免费 | 一区二区三区在线视频观看58 | 黄色免费网站 | 一区二区三区播放 | 精品久久久久久亚洲综合网站 | 色婷婷激情五月 | av久久在线 | 99热这里有 | 91香蕉久久| 一区二区三区四区五区六区 | 色香蕉网| 国产一级片免费播放 | 精品福利在线视频 | 中文字幕欧美日韩va免费视频 | 亚洲高清视频一区二区三区 | 美女网站黄免费 | 亚洲一区二区麻豆 | 人人爽人人爽人人片 | 996久久国产精品线观看 | 操夜夜操 | 免费观看十分钟 | 国产特级毛片aaaaaa毛片 | 最近免费中文字幕大全高清10 | 97中文字幕 | 成人国产精品久久久久久亚洲 | 97av在线视频 | 中文字字幕在线 | 日韩欧美精品一区二区三区经典 | 国产 日韩 中文字幕 | 最新av网址在线 | 成人网页在线免费观看 | 麻豆一精品传二传媒短视频 | 91亚洲精品国偷拍自产在线观看 | 久久久国产网站 | av线上免费观看 | 九九精品久久久 | 欧美极品一区二区三区 | 久草在线视频首页 | 天天色天天操综合网 | 人人草网站 | 久久成人福利 | 一区二区在线不卡 | 在线看成人片 | 欧美黄在线 | 欧美a视频在线观看 | 69国产盗摄一区二区三区五区 | 精品免费久久久久 | 狠狠干成人综合网 | 欧美影片 | 97碰碰精品嫩模在线播放 | 久久视频这里有精品 | 欧美va电影 | 中文字幕日韩一区二区三区不卡 | 精品99免费 | 东方av免费在线观看 | 不卡日韩av| 欧美在线视频精品 | 国产精品日韩在线观看 | 亚洲影视九九影院在线观看 | 91精品欧美一区二区三区 | 久久麻豆精品 | 日韩精品一区在线观看 | 国产在线观看一 | 国产成人精品一区二区三区网站观看 | 欧美激情h| 亚洲精品乱码久久久久久蜜桃不爽 | 青青草在久久免费久久免费 | 一区二区三区精品在线视频 | 免费影视大全推荐 | 97激情影院| 亚洲最新合集 | 国产精品久久网 | www99久久 | 91精品国产自产在线观看永久 | 精品国产一区二区三区蜜臀 | 国产视频69 | 日本xxxxav| 国产精品久久久久久久久久久久午夜 | 超碰人在线 | 成人丝袜| 草久在线视频 | 亚洲日本欧美 | 精品一二三四五区 | 美女网站视频一区 | 亚洲久草网 | 国产一区免费 | 久久综合色天天久久综合图片 | 国产亚洲精品成人av久久ww | av免费网站观看 | 精品国产欧美 | 欧美精品三级 | 天天操天天射天天 | 99视频在线精品国自产拍免费观看 | 99在线观看 | 国产精品久久久久永久免费观看 | 日本一区二区不卡高清 | a电影免费看 | 中文在线字幕免费观看 | 97超碰色| 99精品国产aⅴ | 欧美日韩在线第一页 | 黄色在线观看免费 | 三级午夜片 | 国产一区免费观看 | 久久久美女 | 天天射天天射 | 亚洲婷婷免费 | 色网站免费在线观看 | 成人免费大片黄在线播放 | 韩国av免费看 | 欧美a免费| 99久在线精品99re8热视频 | 黄色av电影 | 麻豆影视在线免费观看 | 九九九九精品九九九九 | 日本精a在线观看 | 韩国精品视频在线观看 | 精品国产资源 | 91精品在线视频 | 91麻豆国产福利在线观看 | 美女网站在线 | 国产97色在线 | 日韩中文久久 | 一区av在线播放 | 国产日产精品一区二区三区四区 | 国产黄视频在线观看 | 欧美性成人 | av在线免费播放 | 日韩久久在线 | 免费a级黄色毛片 | 久久av中文字幕片 | 国产成人久久77777精品 | 国产精品九九视频 | 国产视频一区在线免费观看 | 婷婷深爱网 | 亚洲综合狠狠干 | 亚洲欧洲av | 日韩亚洲在线 | 91爱爱视频| 国产麻豆精品一区 | 欧美综合久久 | av免费在线免费观看 | 人人看人人做人人澡 | 日韩三级视频在线观看 | www.xxxx变态.com| 亚洲v欧美v国产v在线观看 | 一级片免费观看视频 | 99久久精品无码一区二区毛片 | www.天堂av| 久久在线精品 | 国产精品欧美在线 | 又湿又紧又大又爽a视频国产 | 啪啪免费试看 | 在线视频亚洲 | www免费黄色| 欧美日韩91 | 97超碰人人模人人人爽人人爱 | 国产精品久久视频 | 亚洲成av| 999久久久免费视频 午夜国产在线观看 | 在线观看黄色大片 | 91在线成人| 99热精品久久| 欧美日本不卡高清 | 青草草在线 | 综合伊人av| 亚洲精品国产精品乱码在线观看 | 超碰免费公开 | 久久视讯 | 在线电影 一区 | 久久影院亚洲 | 伊人久久av| 欧美一区二区三区在线观看 | 夜夜爽88888免费视频4848 | 久草香蕉在线 | 高清视频一区二区三区 | 欧美夫妻生活视频 | 青青河边草手机免费 | 97热久久免费频精品99 | 免费成视频 | 亚洲激情久久 | 国产免费观看高清完整版 | 国产在线视频一区 | 国产黄色免费 | 亚洲视频高清 | 在线国产福利 | 国产第一页在线观看 | 夜夜爽天天爽 | 国产高清中文字幕 | 国产在线高清视频 | 狠狠狠色狠狠色综合 | 国产91对白在线 | 中文字幕中文字幕 | 日韩高清在线一区二区 | 黄色av影视 | 精品国产乱码久久 | 五月激情久久 | 欧美精品久久久久久久免费 | 9ⅰ精品久久久久久久久中文字幕 | 免费观看黄色12片一级视频 | 欧美一区中文字幕 | 成人亚洲免费 | 一级黄色片在线 | 国产香蕉视频在线观看 | 五月香婷| 成人资源在线观看 | 久久久久久久久福利 | 国产精品理论视频 | 97免费视频在线 | 色偷偷网站视频 | 精品国产一区二区三区四区在线观看 | 亚洲欧洲一级 | 国产做a爱一级久久 | 91超碰在线播放 | 91传媒在线播放 | 摸阴视频 | 最近日韩免费视频 | 涩涩网站在线看 | 四虎成人免费观看 | 国产色在线,com | 亚洲欧洲精品视频 | 亚洲精品成人 | 免费看国产精品 | 91大神精品视频在线观看 | 97av影院| 久久婷婷一区二区三区 | 啪啪av在线| 午夜性盈盈 | 国产一区二区电影在线观看 | 午夜视频在线观看一区二区 | 日韩欧美视频在线播放 | 欧美性免费| 激情五月五月婷婷 | 天天操天天舔天天干 | 97在线免费视频观看 | 免费看三级网站 | 在线看黄色的网站 | 日韩av高清 | 91高清视频 | 国产经典三级 | 一级免费观看 | 2019中文 | 美女网站色 | 成人av电影免费在线观看 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 91黄视频在线观看 | 日本黄色片一区二区 | 国产伦精品一区二区三区… | 黄色成人毛片 | 亚洲成人精品av | 男女全黄一级一级高潮免费看 | 国产一区免费看 | 看国产黄色大片 | 97久久精品午夜一区二区 | 在线观看91av| 美女视频黄是免费的 | 欧美视频日韩视频 | 香蕉视频在线看 | 欧美色综合天天久久综合精品 | 亚洲精品在线观看中文字幕 | 中文字幕在线第一页 | 午夜精品一二区 | 久久艹国产| 天天弄天天干 | 最新免费中文字幕 | 久久视频在线看 | 国内外成人免费在线视频 | 99精品视频精品精品视频 | 日韩高清免费电影 | 91麻豆精品久久久久久 | 一区二区欧美在线观看 | 丁香国产视频 | 亚洲午夜电影网 | 天天干天天操天天拍 | 91在线播 | 国产系列 在线观看 | 99久久精品国产一区二区成人 | 国产不卡精品 | 色综合亚洲精品激情狠狠 | 成人午夜免费剧场 | 黄色视屏免费在线观看 | 国产精品日韩欧美一区二区 | 综合激情网 | 美女精品 | 亚洲综合国产精品 | 久久国产欧美日韩精品 | 久草在线精品观看 | 国产女人18毛片水真多18精品 | 中文久草| 亚洲第一区在线播放 | 视频一区在线播放 | 国产精品丝袜久久久久久久不卡 | 麻豆 free xxxx movies hd| 久久久久久久久久久免费av | 夜夜骑天天操 | 日韩中文在线电影 | 狠狠色丁香婷婷综合久小说久 | 天天综合在线观看 | av免费观看高清 | av最新资源 | 日韩精品一卡 | 久久精品国产精品亚洲 | 伊人久久国产精品 | 免费高清在线观看电视网站 | 久久久国产精品成人免费 | 一区二区中文字幕在线 | 97国产大学生情侣酒店的特点 | 超碰在线日韩 | 国产精品av免费在线观看 | 久久免费国产视频 | 欧美日韩高清一区二区 国产亚洲免费看 | 天天干,天天射,天天操,天天摸 | 国产情侣一区 | 日韩黄色影院 | 免费日韩电影 | 日韩av影视在线观看 | 2017狠狠干 | 超级碰碰免费视频 | 精品在线免费观看 | 亚洲欧美婷婷六月色综合 | 韩国av不卡 | 国产精选在线观看 | 在线观看黄色免费视频 | 久久精品中文视频 | 久久99久久99精品免观看软件 | 国产精品一二三 | 99视频免费在线观看 | 久久久久欧美精品999 | 色婷婷av国产精品 | 亚洲精品久久视频 | 天天综合人人 | 久久免费视频在线 | 六月色丁 | 西西444www大胆无视频 | 成年人在线观看免费视频 | 九热在线 | 在线观看av网 | 日韩欧美在线观看一区 | 国产三级视频 | 精品无人国产偷自产在线 | 久久久精品国产一区二区 | 亚洲理论片在线观看 | 国产色视频一区二区三区qq号 | 亚洲成人影音 | 国产精品永久在线 | 91成人网页版 | 在线播放视频一区 | 国产精品高 | 久久久久免费精品国产小说色大师 | 久久 一区 | 欧美性做爰猛烈叫床潮 | 在线观看日韩国产 | 色国产视频 | 日本免费久久高清视频 | 国产成人精品电影久久久 | 射久久 | 日韩精品一区二区不卡 | 91视频-88av| 国产韩国日本高清视频 | 亚洲开心色 | 亚洲激情综合 | 日韩av免费在线电影 | 国产麻豆果冻传媒在线观看 | 久久精品国产第一区二区三区 | 精品亚洲一区二区三区 | 国产精品一区二区精品视频免费看 | 99一区二区三区 | 亚洲乱码在线观看 | 五月天婷亚洲天综合网鲁鲁鲁 | www.91成人| 去干成人网 | 9i看片成人免费看片 | 97碰在线视频 | 久草视频免费 | 精品国产伦一区二区三区免费 | 日本在线观看黄色 | 日韩高清在线一区二区 | 六月婷婷久香在线视频 | 五月天亚洲激情 | 亚洲精品一区二区三区在线观看 | 色偷偷88888欧美精品久久久 | 国产精品va在线 | 超碰97av在线| 色综久久 | 天天草天天干天天射 | 成人动漫一区二区 | 国产精品不卡在线 | 久草资源在线 | 亚洲天堂自拍视频 | 久久国内精品99久久6app | 天天草夜夜 | 国产亚洲在线观看 | 亚洲视频免费在线观看 | 欧美少妇xxxxxx | 天天色天天操天天爽 | 日韩国产精品一区 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 成人a在线观看高清电影 | 国产韩国日本高清视频 | 九九免费在线视频 | 精品国产激情 | 91精品国产欧美一区二区 | 毛片随便看 | 亚洲国产伊人 | 不卡视频在线看 | 欧美精品久久久久久久久久白贞 | 国产一区自拍视频 | 国产精品久免费的黄网站 | 天天插天天操天天干 | 国产一级久久 | 国产91欧美| 国产黄色片网站 | 91av蜜桃 | 国产在线不卡一区 | 伊人天堂网 | 91在线你懂的 | 国产美女视频一区 | 亚洲狠狠| 精品久久一区二区 | 日韩大片在线看 | 外国av网 | 国产精品va在线播放 | 精品久久国产一区 | 天天操天天射天天 | 香蕉视频18| 日本护士三级少妇三级999 | 欧美日韩国产二区 | 亚洲欧美成人网 | 一区二区三区四区不卡 | 天天看天天干天天操 | 欧美日韩一区二区在线 | 亚洲国产电影在线观看 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 九九在线视频 | 成人性生爱a∨ | 亚洲精品网页 | 四虎亚洲精品 | 激情视频在线观看网址 | av丝袜制服 | 免费看污在线观看 | 久久国产亚洲精品 | 在线观看av国产 | 成片免费观看视频999 | 97超碰精品 | 黄污视频网站大全 | 国产免费视频在线 | 欧美成年黄网站色视频 | 国产成人99久久亚洲综合精品 | 久久国产免费视频 | 色噜噜在线观看 | 欧美一二三四在线 | 国产91对白在线播 | 日韩免费一区二区三区 | 亚洲作爱| 最新av在线播放 | 麻豆国产电影 | 久久伊人精品一区二区三区 | 在线播放91 | 丁香婷婷综合色啪 | 精品久久久久一区二区国产 | 天天在线视频色 | www.久久com| 奇米导航 | 欧美日韩免费看 | www.少妇| 欧美日本一二三 | 国产精品免费不卡 | 久久久久久久免费 | 最近中文字幕mv免费高清在线 | 欧美大香线蕉线伊人久久 | 天天色天天骑天天射 | 日韩高清在线一区 | 丁香五月亚洲综合在线 | 一区 在线观看 | 黄色一级在线免费观看 | 亚洲国产精品成人va在线观看 | 国产一级淫片在线观看 | 免费看毛片在线 | 免费看av在线 | 国产麻豆电影在线观看 | 九九热只有精品 | 一区二区三区精品在线 | 色婷婷亚洲婷婷 | 久久综合精品一区 | 日韩av资源站 | 国产精品久久久久久久久久久不卡 | 国产亚洲成av片在线观看 | 亚州国产精品久久久 | 日韩资源视频 | 天天色天| 米奇四色影视 | 九九精品在线观看 | 韩国精品福利一区二区三区 | 国产一区电影在线观看 | 欧美片一区二区三区 | 欧美在线视频日韩 | 久草视频在线新免费 | 色婷婷a | 亚洲春色奇米影视 | 久草电影在线观看 | 亚洲一级免费电影 | 不卡的一区二区三区 | 日韩久久影院 | 人人爽人人爽人人爽学生一级 | 日韩精品1区2区 | 亚洲精品观看 | 亚洲综合欧美精品电影 | 色天天综合网 | 狠狠狠狠狠狠操 | 亚洲免费av一区二区 | 亚洲 成人 欧美 | 亚洲精品美女久久久 | 97在线视频免费播放 | 日本中文一级片 | 精品国产乱码久久久久久1区2匹 | 国产一区二区不卡视频 | 在线а√天堂中文官网 | 97超碰站| 成人av电影在线观看 | 9ⅰ精品久久久久久久久中文字幕 | 精品久久久久久亚洲 | 国产xxxx性hd极品 | 99视频在线| 91社区国产高清 | 成年人视频免费在线 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 免费黄在线观看 | 亚洲激情校园春色 | 久久99视频精品 | 国产高清视频免费观看 | 国产视频一区二区在线播放 | 成人黄色电影视频 | av 一区二区三区四区 | 在线观看精品国产 | 精品久久久免费视频 | 婷婷视频 | 国产69精品久久app免费版 | 日韩精品一区二区三区第95 | 天堂在线一区二区 | 天天爱天天操天天射 | 国产一区二区三区四区在线 | 欧美乱熟臀69xxxxxx | 91在线免费视频观看 | 久久国产亚洲 | 日韩理论在线播放 | 日韩久久影院 | 天天操夜夜操天天射 | 欧美日韩国产一区二区在线观看 | 国产网红在线观看 | 69国产精品成人在线播放 | 视频一区二区在线 | 国产精品毛片一区二区在线 | 免费看色网站 | 午夜美女av| 中文字幕欲求不满 | 九九日九九操 | 又紧又大又爽精品一区二区 | 美女福利视频一区二区 | 丁香在线观看完整电影视频 | av在线播放中文字幕 | 天天做夜夜做 | 手机av在线网站 | 97国产精品免费 | 久久综合九色综合久99 | 色多多视频在线观看 | 久精品视频免费观看2 | 国产破处在线播放 | 日韩免费一区二区在线观看 | 丝袜少妇在线 | 97在线看 | 国产免费小视频 | 久久呀 | 黄网站app在线观看免费视频 | 国产精品18久久久久久首页狼 | 中文字幕网站视频在线 | 欧美成a人片在线观看久 | 手机av网站 | 国产黄色资源 | 国产r级在线观看 | 插综合网 | 国产精品日韩在线观看 | 精品久久久久久亚洲综合网 | 日本中文字幕一二区观 | 91超国产| 免费在线观看不卡av | 国产成人61精品免费看片 | 在线午夜电影神马影院 | 911香蕉视频 | 97超碰人 | 少妇搡bbbb搡bbb搡忠贞 | 久久久999精品视频 国产美女免费观看 | 国产精品久久久电影 | 中文在线www | 97国产精品 | 色婷婷骚婷婷 | 国产97视频在线 | 免费看短 | 国产精品久久一卡二卡 | 国产精品免费视频一区二区 | 胖bbbb搡bbbb擦bbbb | 成年人视频在线免费观看 | 色天天中文 | 国产a国产a国产a | 亚洲国产精品人久久电影 | 网站在线观看你们懂的 | 国产精品1区2区在线观看 | 日韩在线观看小视频 | 国产又黄又硬又爽 | 97香蕉视频| 免费网站色 | 果冻av在线 | 97在线观视频免费观看 | 国产一二区精品 | 婷婷中文字幕综合 | 91精品国产高清自在线观看 | 欧美日韩国产mv | 色婷婷狠狠五月综合天色拍 | 久久综合狠狠综合久久综合88 | 中文字幕乱码电影 | 久久中文字幕视频 | 国产精品成久久久久 | 91在线91 | 国产精品久久久久久久av大片 | 91尤物国产尤物福利在线播放 | 日韩一级黄色av | 欧美a级在线 | 久久视频在线观看 | 精品久久久久久国产 | 91精品一区二区在线观看 | 97av精品 | 处女av在线 | 在线观看av大片 | 一区二区三区在线不卡 | 黄色av免费| 国产一区高清在线 | 亚洲v精品 | 久久综合狠狠狠色97 | 国产成人精品亚洲精品 |