Drukowanie dokumentów w Aspose.Words dla Java

Jeśli chcesz drukować dokumenty przy użyciu Aspose.Words dla Java, jesteś we właściwym miejscu. W tym przewodniku krok po kroku przeprowadzimy Cię przez proces drukowania dokumentów za pomocą Aspose.Words dla Java przy użyciu dostarczonego kodu źródłowego.

Wstęp

Drukowanie dokumentów jest częstym zadaniem w wielu aplikacjach. Aspose.Words for Java zapewnia potężne API do pracy z dokumentami Word, w tym możliwość ich drukowania. W tym samouczku przeprowadzimy Cię krok po kroku przez proces drukowania dokumentu programu Word.

Konfigurowanie środowiska

Zanim zagłębimy się w kod, upewnij się, że spełnione są następujące wymagania wstępne:

  • Zainstalowany zestaw Java Development Kit (JDK).
  • Biblioteka Aspose.Words for Java pobrana i dodana do Twojego projektu

Ładowanie dokumentu

Aby rozpocząć, musisz załadować dokument programu Word, który chcesz wydrukować. Zastępować"Your Document Directory" ze ścieżką do dokumentu i"Your Output Directory" z żądanym katalogiem wyjściowym.

string dataDir = "Your Document Directory";
string outPath = "Your Output Directory";
Document doc = new Document(dataDir + "Rendering.docx");

Tworzenie zadania drukowania

Następnie utworzymy zadanie drukowania, aby wydrukować załadowany dokument. Poniższy fragment kodu inicjuje zadanie drukowania i ustawia żądane ustawienia drukarki.

// Utwórz zadanie drukowania, za pomocą którego wydrukujesz nasz dokument.
PrinterJob pj = PrinterJob.getPrinterJob();
//Zainicjuj zestaw atrybutów liczbą stron w dokumencie.
PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
attributes.add(new PageRanges(1, doc.getPageCount()));
// Przekaż ustawienia drukarki wraz z innymi parametrami do drukowanego dokumentu.
MultipagePrintDocument awPrintDoc = new MultipagePrintDocument(doc, 4, true, attributes);

Drukowanie dokumentu

Teraz, gdy skonfigurowaliśmy zadanie drukowania, czas wydrukować dokument. Poniższy fragment kodu kojarzy dokument z zadaniem drukowania i inicjuje proces drukowania.

// Przekaż dokument do wydrukowania za pomocą zadania drukowania.
pj.setPrintable(awPrintDoc);
pj.print();

Kompletny kod źródłowy

string dataDir = "Your Document Directory";
Document doc = new Document(dataDir + "Rendering.docx");
// Utwórz zadanie drukowania, za pomocą którego wydrukujesz nasz dokument.
PrinterJob pj = PrinterJob.getPrinterJob();
//Zainicjuj zestaw atrybutów liczbą stron w dokumencie.
PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
attributes.add(new PageRanges(1, doc.getPageCount()));
// Przekaż ustawienia drukarki wraz z innymi parametrami do drukowanego dokumentu.
MultipagePrintDocument awPrintDoc = new MultipagePrintDocument(doc, 4, true, attributes);
// Przekaż dokument do wydrukowania za pomocą zadania drukowania.
pj.setPrintable(awPrintDoc);
pj.print();

Kod źródłowy MultipagePrintDocument

class MultipagePrintDocument implements Printable
{
    private final Document mDocument;
    private final int mPagesPerSheet;
    private final boolean mPrintPageBorders;
    private final AttributeSet mAttributeSet;
    /// <podsumowanie>
    /// Konstruktor niestandardowej klasy PrintDocument.
    // / </podsumowanie>
    public MultipagePrintDocument(Document document, int pagesPerSheet, boolean printPageBorders,
                                  AttributeSet attributes) {
        if (document == null)
            throw new IllegalArgumentException("document");
        mDocument = document;
        mPagesPerSheet = pagesPerSheet;
        mPrintPageBorders = printPageBorders;
        mAttributeSet = attributes;
    }
    public int print(Graphics g, PageFormat pf, int page) {
        // Indeksy początku i końca strony zgodnie z definicją w zestawie atrybutów.
        int[][] pageRanges = ((PageRanges) mAttributeSet.get(PageRanges.class)).getMembers();
        int fromPage = pageRanges[0][0] - 1;
        int toPage = pageRanges[0][1] - 1;
        Dimension thumbCount = getThumbCount(mPagesPerSheet, pf);
        // Oblicz indeks strony, która ma zostać wyrenderowana jako następna.
        int pagesOnCurrentSheet = (int) (page * (thumbCount.getWidth() * thumbCount.getHeight()));
        // Jeśli indeks strony jest większy niż całkowity zakres stron, nie ma nic
        // więcej do renderowania.
        if (pagesOnCurrentSheet > (toPage - fromPage))
            return Printable.NO_SUCH_PAGE;
        // Oblicz rozmiar każdego symbolu zastępczego miniatury w punktach.
        Point2D.Float thumbSize = new Point2D.Float((float) (pf.getImageableWidth() / thumbCount.getWidth()),
                (float) (pf.getImageableHeight() / thumbCount.getHeight()));
        // Oblicz numer pierwszej strony, która ma zostać wydrukowana na tym arkuszu papieru.
        int startPage = pagesOnCurrentSheet + fromPage;
        // Wybierz numer ostatniej strony, która ma zostać wydrukowana na tym arkuszu papieru.
        int pageTo = Math.max(startPage + mPagesPerSheet - 1, toPage);
        //Przejdź w pętli wybrane strony z zapisanej bieżącej strony do obliczenia
        // Ostatnia strona.
        for (int pageIndex = startPage; pageIndex <= pageTo; pageIndex++) {
            // Oblicz wskaźniki kolumn i wierszy.
            int rowIdx = (int) Math.floor((pageIndex - startPage) / thumbCount.getWidth());
            int columnIdx = (int) Math.floor((pageIndex - startPage) % thumbCount.getWidth());
            // Zdefiniuj lokalizację miniatury we współrzędnych światowych (w tym przypadku punktów).
            float thumbLeft = columnIdx * thumbSize.x;
            float thumbTop = rowIdx * thumbSize.y;
            try {
                // Oblicz lewą i górną pozycję startową.
                int leftPos = (int) (thumbLeft + pf.getImageableX());
                int topPos = (int) (thumbTop + pf.getImageableY());
                // Renderuj stronę dokumentu do obiektu Graphics przy użyciu obliczonych współrzędnych
                // i rozmiar symbolu zastępczego miniatury.
                // Przydatną wartością zwracaną jest skala, w jakiej strona została wyrenderowana.
                float scale = mDocument.renderToSize(pageIndex, (Graphics2D) g, leftPos, topPos, (int) thumbSize.x,
                        (int) thumbSize.y);
                // Narysuj krawędzie strony (miniatura strony może być mniejsza niż miniatura
                // rozmiar symbolu zastępczego).
                if (mPrintPageBorders) {
                    // Uzyskaj rzeczywisty 100% rozmiar strony w punktach.
                    Point2D.Float pageSize = mDocument.getPageInfo(pageIndex).getSizeInPoints();
                    // Narysuj obramowanie wokół skalowanej strony, korzystając ze znanego współczynnika skali.
                    g.setColor(Color.black);
                    g.drawRect(leftPos, topPos, (int) (pageSize.x * scale), (int) (pageSize.y * scale));
                    // Narysuj obramowanie wokół symbolu zastępczego miniatury.
                    g.setColor(Color.red);
                    g.drawRect(leftPos, topPos, (int) thumbSize.x, (int) thumbSize.y);
                }
            } catch (Exception e) {
                // Jeśli podczas renderowania wystąpią jakieś błędy, nie rób nic.
                // Spowoduje to narysowanie pustej strony, jeśli podczas renderowania wystąpią jakiekolwiek błędy.
            }
        }
        return Printable.PAGE_EXISTS;
    }
    private Dimension getThumbCount(int pagesPerSheet, PageFormat pf) {
        Dimension size;
        // Określ liczbę kolumn i wierszy na arkuszu dla pliku
        //Papier o orientacji krajobrazowej.
        switch (pagesPerSheet) {
            case 16:
                size = new Dimension(4, 4);
                break;
            case 9:
                size = new Dimension(3, 3);
                break;
            case 8:
                size = new Dimension(4, 2);
                break;
            case 6:
                size = new Dimension(3, 2);
                break;
            case 4:
                size = new Dimension(2, 2);
                break;
            case 2:
                size = new Dimension(2, 1);
                break;
            default:
                size = new Dimension(1, 1);
                break;
        }
        // Zamień szerokość i wysokość, jeśli papier jest w orientacji pionowej.
        if ((pf.getWidth() - pf.getImageableX()) < (pf.getHeight() - pf.getImageableY()))
            return new Dimension((int) size.getHeight(), (int) size.getWidth());
        return size;
	}
}

Wniosek

Gratulacje! Pomyślnie wydrukowałeś dokument programu Word przy użyciu Aspose.Words for Java. Ten przewodnik krok po kroku powinien pomóc w bezproblemowej integracji drukowania dokumentów z aplikacjami Java.

Często zadawane pytania

P1: Czy mogę wydrukować określone strony dokumentu za pomocą Aspose.Words dla Java?

Tak, możesz określić zakres stron podczas drukowania dokumentu. W przykładzie kodu użyliśmyattributes.add(new PageRanges(1, doc.getPageCount())) aby wydrukować wszystkie strony. W razie potrzeby możesz dostosować zakres stron.

P2: Czy Aspose.Words dla Java nadaje się do drukowania wsadowego?

Absolutnie! Aspose.Words for Java doskonale nadaje się do zadań drukowania wsadowego. Możesz przeglądać listę dokumentów i drukować je jeden po drugim, używając podobnego kodu.

P3: Jak mogę poradzić sobie z błędami lub wyjątkami w drukowaniu?

Należy uwzględnić wszelkie potencjalne wyjątki, które mogą wystąpić podczas procesu drukowania. Sprawdź dokumentację Aspose.Words for Java, aby uzyskać informacje na temat obsługi wyjątków.

P4: Czy mogę bardziej dostosować ustawienia drukowania?

Tak, możesz dostosować ustawienia drukowania do swoich specyficznych wymagań. Zapoznaj się z dokumentacją Aspose.Words for Java, aby dowiedzieć się więcej o dostępnych opcjach drukowania.

P5: Gdzie mogę uzyskać dodatkową pomoc i wsparcie dla Aspose.Words dla Java?

Aby uzyskać dodatkowe wsparcie i pomoc, możesz odwiedzić stronęForum Aspose.Words dla Java.


Teraz, gdy już nauczyłeś się, jak drukować dokumenty przy użyciu Aspose.Words dla Java, możesz zacząć wdrażać tę funkcjonalność w swoich aplikacjach Java. Miłego kodowania!