Python üzerinden Java ile PDF veya HTML'den Sunumları İçe Aktarma

Giriş

Aspose.Slides for Python via Java, Microsoft PowerPoint olmadan PDF sayfalarını veya HTML içeriğini PowerPoint slaytlarına dönüştürebilir. SlideCollection sınıfı, içe aktarılan içeriği bir sunuma eklemek için addFromPdf ve addFromHtml sağlar.

HTML yerleşimi üzerinde daha fazla kontrol için, SlideCollection.insertFromHtml oluşturulan slaytları bir koleksiyon indeksine ekleyebilir veya mevcut bir slaytta kullanılabilir alanı doldurmaya başlayabilir. Uzun HTML otomatik olarak ek slaytlara bölünür, kaynak bir dize veya akış olarak sağlanabilir ve dış kaynaklar bir temel URI ile birlikte ExternalResourceResolver üzerinden yüklenebilir. Döndürülen Slide dizisi, etkilenen ve yeni oluşturulan slaytları tanımlar.

PDF’ten İçeri Aktarma

Bir PDF belgesini PowerPoint sunumuna dönüştürmek için, içeriğini slayt koleksiyonuna içe aktarın ve sonucu bir PPTX dosyası olarak kaydedin.

pdf-to-powerpoint

  1. Yeni bir Presentation nesnesi oluşturun.
  2. PDF dosyasının yolunu sağlayarak addFromPdf metodunu çağırın.
  3. Sunumu bir PPTX dosyasına yazmak için save metodunu SaveFormat.Pptx ile çağırın.

Aşağıdaki Python örneği bir PDF belgesini içe aktarır ve oluşturulan slaytları bir PowerPoint sunumu olarak kaydeder:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    presentation.getSlides().addFromPdf("document.pdf")
    presentation.save("presentation.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

İçe aktarma slaytları eklediği için varsayılan boş slayt sunumda kalır. Yalnızca içe aktarılan sayfaları tutmak istiyorsanız, içe aktarmadan önce slayt koleksiyonunu SlideCollection.clear ile temizleyin.

addFromPdf yöntemi eklediği slaytları döndürür; bu, yalnızca içe aktarılan slaytları işlemeniz gerektiğinde kullanışlıdır.

HTML’den İçeri Aktarma

Aspose.Slides, bir HTML belgesinden de slaytlar oluşturabilir. Kaynak HTML metni ya da bir akış olarak sağlanabilir. Aşağıdaki adımlar bir dosya akışı kullanır:

  1. Yeni bir Presentation nesnesi oluşturun.
  2. HTML dosyasını okuma kipinde açın ve akışı addFromHtml metoduna iletin.
  3. Sonucu bir PPTX dosyasına yazmak için save metodunu SaveFormat.Pptx ile çağırın.

Aşağıdaki Python örneği bir HTML belgesini içe aktarır ve oluşturulan slaytları bir PowerPoint sunumu olarak kaydeder:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat
from java.io import FileInputStream

presentation = Presentation()
try:
    html_stream = FileInputStream("page.html")
    try:
        presentation.getSlides().addFromHtml(html_stream)
    finally:
        html_stream.close()
    presentation.save("presentation.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

HTML İçeriği Ekleme

HTML tarafından oluşturulan slaytların eklenmek yerine belirli bir konuma yerleştirilmesi gerektiğinde SlideCollection.insertFromHtml kullanın. İndeks sıfır tabanlıdır ve içe aktarmanın başlayacağı konumu belirler.

useSlideWithIndexAsStart argümanı, içe aktarıcının bu konumu nasıl kullanacağını denetler:

  • False olduğunda, içe aktarıcı belirtilen indeksde yeni slaytlar oluşturur ve sonrasındaki slaytları kaydırır.
  • True olduğunda, içe aktarıcı mevcut slayttaki kullanılabilir alanda içeriği yerleştirmeye başlar. HTML sığmazsa, Aspose.Slides bunu otomatik olarak bölerek başlangıç slaytının hemen sonrasına ek slaytlar ekler.

SlideCollection.insertFromHtml bir Slide nesnesi dizisi döndürür. Ekleme yeni slaytlarda başlarsa, döndürülen her öğe yeni oluşturulmuş olur. Mevcut bir slayt başlangıç olarak kullanılırsa, dizi önce o etkilenen slaytı ve ardından yeni taşma slaytlarını içerir. Bu diziyi inceleyerek, sunumun slayt sayısından etkilenmiş aralığı hesaplamaktan kaçınabilirsiniz.

HTML’yi Yeni Slaytlara Ekle

Aşağıdaki örnek HTML’yi bir dize olarak sağlar ve oluşturulan slaytları koleksiyon indeksi 1‘de ekler. False geçmek, mevcut slaytları yer değiştirmeden bırakır; sadece boşluk açmak için kaydırma yapılır.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    layout_slide = presentation.getLayoutSlides().get_Item(0)
    presentation.getSlides().addEmptySlide(layout_slide)
    presentation.getSlides().addEmptySlide(layout_slide)

    insert_index = 1
    html = "<html><body><h1>Quarterly update</h1><p>This content is inserted before the slide that was at index 1.</p></body></html>"
    inserted_slides = presentation.getSlides().insertFromHtml(insert_index, html, False)

    for slide in inserted_slides:
        print("Inserted slide index:", presentation.getSlides().indexOf(slide))

    presentation.save("presentation-with-inserted-html.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Varolan Bir Slaytta Başlat

Sonraki örnek HTML’yi bir akış üzerinden sağlar. Mevcut şablon slaytındaki bir başlık şekli korunur, içe aktarım dolu alanın altından başlar ve uzun gövde yeni slaytlara devam eder.

HTML ayrıca göreli bir resim URL’si içerir. ExternalResourceResolver kaynağı elde ederken, temel URI içe aktarıcıya images/logo.png öğesinin nasıl çözüleceğini söyler. Bu örnekte dosyanın html-assets/images/logo.png konumunda bulunması beklenir.

from pathlib import Path

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ExternalResourceResolver, Presentation, SaveFormat, ShapeType
from java.io import ByteArrayInputStream

presentation = Presentation()
try:
    template_slide = presentation.getSlides().get_Item(0)
    header = template_slide.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 680, 60)
    header.getTextFrame().setText("Product roadmap")

    html_parts = ["<html><body><img src='images/logo.png' width='120' height='60'><h2>Roadmap details</h2>"]
    for item_index in range(1, 61):
        html_parts.append(f"<p style='font-size:24pt'>Roadmap item {item_index}: detailed implementation notes.</p>")
    html_parts.append("</body></html>")

    html = "".join(html_parts)
    html_data = html.encode("utf-8")
    resolver = ExternalResourceResolver()
    base_directory = Path("html-assets").resolve()
    base_uri = base_directory.as_uri() + "/"

    html_stream = ByteArrayInputStream(html_data)
    try:
        affected_slides = presentation.getSlides().insertFromHtml(0, html_stream, resolver, base_uri, True)
        for slide in affected_slides:
            print("Affected slide index:", presentation.getSlides().indexOf(slide))
    finally:
        html_stream.close()

    presentation.save("presentation-with-html-overflow.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

SSS

Aspose.Slides PDF içe aktarırken tabloları algılayabilir mi?

Evet. Bir PdfImportOptions nesnesi oluşturun, True ile setDetectTables metodunu çağırın ve seçenekleri addFromPdf metoduna aktarın. Tablo tanıma kalitesi, kaynak PDF’nin yapısına ve karmaşıklığına bağlıdır.