Я сделал «импорт» - ошибка TYPE EXPECTED - PullRequest
1 голос
/ 26 августа 2009

Я сделал это:

Imports iTextSharp.text.rtf

, а затем это:

Dim grx As graphic = New graphic

и на первом «графике» я получаю «ожидаемый тип»

рисунок является членом iTextSharp.text.rtf

Вот окружающий код:

Public Sub New1()
    Console.WriteLine("Chapter 4 example 4: Simple Graphic")
    Dim document As Document = New Document
    Try
        PdfWriter.GetInstance(document, New FileStream("Chap0404.pdf", FileMode.Create))
        document.Open()
        Dim grx As graphic = New graphic
        grx.Rectangle(100, 700, 100, 100)
        grx.MoveTo(100, 700)
        grx.LineTo(200, 800)
        grx.Stroke()
        document.Add(grx)
    Catch de As DocumentException
        Console.Error.WriteLine(de.Message)
    Catch ioe As IOException
        Console.Error.WriteLine(ioe.Message)
    End Try
    document.Close()
End Sub

Вот весь учебник: (извините, это не учебник, но так его называют)

Imports System
Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Namespace iTextSharp.tutorial.Chap04

Public Class Chap0404

    Public Sub New()
        Console.WriteLine("Chapter 4 example 4: Simple Graphic")
        Dim document As Document = New Document
        Try
            PdfWriter.GetInstance(document, New FileStream("Chap0404.pdf", FileMode.Create))
            document.Open
            Dim grx As Graphic = New Graphic
            grx.Rectangle(100, 700, 100, 100)
            grx.MoveTo(100, 700)
            grx.LineTo(200, 800)
            grx.Stroke
            document.Add(grx)
        Catch de As DocumentException
            Console.Error.WriteLine(de.Message)
        Catch ioe As IOException
            Console.Error.WriteLine(ioe.Message)
        End Try
        document.Close
    End Sub
End Class 

Конечное пространство имен

1 Ответ

3 голосов
/ 26 августа 2009

Поработав с этим некоторое время, я думаю, что вывод состоит в том, что учебник, которому вы следуете, применим к устаревшей версии iText / iTextSharp.

Их sourceforge сайт ссылается на соответствующий пример с января 2006 года, и ваш перевод на VB.NET выглядит точным - проблема в том, что текущая версия iTextSharp не ' t содержит тип Graphic, и после некоторого поиска он, похоже, не был просто переименован - более вероятно, что полный графический API был значительно изменен.

На странице sourceforge есть отказ от ответственности (последняя строка), что связанные примеры могут больше не работать,

Обратите внимание, что некоторые примеры не будут работать с самой последней версией iTextSharp.

С учетом данных и использования Reflector я обнаружил, что ожидаемый метод Graphic.Stroke() существует только в классе PdfContentByte; однако Document.Add() ожидает класс, который реализует IElement, а PdfContentByte - нет.

Это наименьшее изменение, которое я мог бы сделать, чтобы закрыть для компиляции, но оно значительно меняет цель кода и, вероятно, не будет работать должным образом. Вот моя обновленная версия для справки:

Public Class Chap0404

    Public Sub New()
        Console.WriteLine("Chapter 4 example 4: Simple Graphic")
        Dim document As Document = New Document
        Try
            Dim writer As PdfWriter = PdfWriter.GetInstance(document, New FileStream("Chap0404.pdf", FileMode.Create))
            document.Open()
            Dim grx As PdfContentByte = New PdfContentByte(writer)
            grx.Rectangle(100, 700, 100, 100)
            grx.MoveTo(100, 700)
            grx.LineTo(200, 800)
            grx.Stroke()
            'document.Add(grx)
        Catch de As DocumentException
            Console.Error.WriteLine(de.Message)
        Catch ioe As IOException
            Console.Error.WriteLine(ioe.Message)
        End Try
        document.Close()
    End Sub
End Class
...