วิธีทำงานกับภาพและกราฟิกใน TypeScript

วิธีทำงานกับภาพและกราฟิกใน TypeScript

คู่มือนี้แสดงวิธีวางรูปภาพและกราฟิกเวกเตอร์บนหน้า PDF ด้วย Aspose.PDF FOSS สำหรับ TypeScript. Page.AddImage() ฝังไบต์แบบแรสเตอร์, Page.Graphics() ส่งคืน PageGraphics สำหรับการวาดรูปทรง, และ Document.OptionalContent จัดกลุ่มทั้งสองเป็นชั้นที่สามารถสลับเปิดปิดได้. จำเป็นต้องใช้ Node.js 22 หรือใหม่กว่า.

คู่มือแบบขั้นตอนต่อขั้นตอน

ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ

git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run build

ตรวจสอบการติดตั้งโดยการนำเข้าคลาส Document ในไฟล์ TypeScript ใหม่ — บรรทัดนี้ควรทำงานโดยไม่มีข้อผิดพลาดเมื่อแพ็กเกจถูกติดตั้งแล้ว:

import { Document } from '@asposefoss/pdf';

ขั้นตอนที่ 2: นำเข้าคลาสที่จำเป็น

นำเข้า Document เพื่อเปิดไฟล์; AddImage(), Graphics() และ AddBarcode() ถูกเรียกโดยตรงบนอินสแตนซ์ Page ที่มันคืนค่า:

import { Document } from '@asposefoss/pdf';

ขั้นตอนที่ 3: ฝังภาพแรสเตอร์

Page.AddImage(data, rect, opts) ใส่ไบต์ของ JPEG หรือ PNG ไว้ภายใน rect ที่กำหนดขอบเขต, ปรับสเกลให้พอดี:

const doc = Document.OpenFile('input.pdf');
const page = doc.Pages[0];

const imgW = 300;
const imgH = 237; // aspect preserved from a 1280x1014 source
page.AddImage(imageBytes, [150, 400, 150 + imgW, 400 + imgH]);

ขั้นตอนที่ 4: วาดกราฟิกเวกเตอร์

Page.Graphics() คืนค่า PageGraphics ที่บัฟเฟอร์การเรียกวาดภาพจนกว่า apply() จะทำการคอมมิต. เชื่อมต่อ setStrokeColor(), setFillColor(), setLineWidth(), และเมธอดรูปทรงเช่น rect(), circle(), และ drawLine(), จากนั้น stroke() / fill() / fillStroke():

const g = page.Graphics();

g.save()
  .setStrokeColor([0.55, 0.60, 0.75])
  .setLineWidth(1)
  .rect(80, 300, 435, 340)
  .stroke()
  .restore();

g.setFillColor([0.88, 0.91, 0.98])
  .setStrokeColor([0.45, 0.52, 0.75])
  .setLineWidth(1)
  .circle(120, 340, 13)
  .fillStroke();

g.apply();

ขั้นตอนที่ 5: ผูกภาพและกราฟิกกับเลเยอร์เนื้อหาแบบเลือกได้

doc.OptionalContent.AddLayer(name, opts) สร้าง Layer ที่สามารถสลับเปิด/ปิดในแผงเลเยอร์ของโปรแกรมดู. ส่งผ่านเป็น layer ไปยัง AddImage(), หรือห่อหุ้มการเรียก PageGraphics ด้วย BeginLayer() / EndLayer():

const oc = doc.OptionalContent;
const grid = oc.AddLayer('Grid', { visible: false }); // default off
const branding = oc.AddLayer('Branding');

const g2 = page.Graphics();
g2.BeginLayer(grid);
g2.save().setStrokeColor([0.72, 0.76, 0.88]).setLineWidth(0.4).setDash([3, 3]);
g2.drawLine(80, 300, 515, 300);
g2.stroke().restore();
g2.EndLayer();
g2.apply();

page.AddImage(logoBytes, [370, 606, 480, 640], { layer: branding });

ขั้นตอนที่ 6: เพิ่มบาร์โค้ด

Page.AddBarcode(spec, rect, opts) วาดสัญลักษณ์บาร์โค้ด; spec.type เลือกสัญลักษณ์และ spec.data คือข้อมูลที่เข้ารหัส. เช่นเดียวกับ AddImage(), มันรับตัวเลือก layer:

page.AddBarcode({ type: 'code128', data: 'ROOM-204' }, [370, 340, 500, 384], {
  layer: branding,
  text: true, // draw the human-readable payload beneath the symbol
});

ปัญหาทั่วไปและวิธีแก้ไข

กราฟิกที่วาดด้วย PageGraphics ไม่ปรากฏบนหน้าเว็บ. เรียกบัฟเฟอร์จนกว่า apply() ถูกเรียก — ทุก PageGraphics ลำดับต้องมีการจับคู่ apply() ก่อนที่หน้าจะถูกบันทึก.

เลเยอร์จะไม่ปรากฏในแผงเลเยอร์ของผู้ดู. Confirm AddLayer() ถูกเรียกผ่าน doc.OptionalContent, ไม่ได้สร้างเป็นวัตถุแยกอิสระ — ชั้นต้องถูกลงทะเบียนในการกำหนดค่าเนื้อหาแบบเลือกของเอกสารเพื่อให้แสดงรายการ.

ภาพหรือบาร์โค้ดจะละเลยการสลับการมองเห็นของชั้น. Only AddImage(), AddBarcode(), และเนื้อหาที่ห่อหุ้มใน PageGraphics.BeginLayer() / EndLayer() ผูกกับชั้นผ่าน /OC — เนื้อหาพื้นฐานอื่นของหน้า (ข้อความธรรมดาที่วาดโดยไม่มีตัวเลือกชั้น, ตัวอย่างเช่น) จะไม่ได้รับผลกระทบจากการสลับชั้นใด ๆ.

Page.AddImage() ทำให้ภาพบิดเบือน. rect ตั้งค่าความกว้างและความสูงที่วางไว้โดยตรง — คำนวณจากอัตราส่วนภาพของรูปต้นฉบับก่อนหากภาพไม่ควรยืดออก.

คำถามที่พบบ่อย

เลเยอร์สามารถตั้งค่าให้ซ่อนโดยค่าเริ่มต้นได้หรือไม่?

ใช่ — ส่ง { visible: false } ไปยัง OptionalContent.AddLayer().

เลเยอร์หนึ่งสามารถซ้อนอยู่ใต้เลเยอร์อื่นได้หรือไม่?

ใช่ — ส่ง { parent: someLayer } เมื่อเรียก AddLayer() เพื่อซ้อนเลเยอร์ใหม่ใต้เลเยอร์ที่มีอยู่ใน /D /Order ของแผงเลเยอร์.

Page.AddImage() รองรับรูปแบบภาพใด?

ไบต์แรสเตอร์ของ JPEG และ PNG.

การวาดด้วย PageGraphics รองรับความทึบแสงและเส้นประหรือไม่?

ใช่ — setOpacity(alpha) กำหนดค่าอัลฟ่าของ fill/stroke และ setDash(pattern, phase) กำหนดรูปแบบเส้นประ; ทั้งสองสามารถเชนต่อได้เช่นเดียวกับตัวตั้งค่า PageGraphics อื่น ๆ.

ดูเพิ่มเติม

 ภาษาไทย