Многостраничный pdf-файл может быть извлечен как текст на одном уровне, а не указывать номер страницы в качестве аргумента, используя ниже код
import PyPDF2
import collections
pdf_file = open('samples.pdf', 'rb')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
c = collections.Counter(range(number_of_pages))
for i in c:
page = read_pdf.getPage(i)
page_content = page.extractText()
print page_content.encode('utf-8')
хм. Я никогда не использовал VB.net ни в какой глубине, таким образом, я делаю предположение здесь, но я думаю, что блок 'использования' мог бы быть близко к тому, что Вы хотите.
использование определяет область действия блока для переменной, посмотрите, что примером ниже
using ( int temp = someFunction(param1) ) {
temp++; // this works fine
}
temp++; // this blows up as temp is out of scope here and has been disposed
Вот является статья от Microsoft, которая объясняет немного больше
<час>РЕДАКТИРОВАНИЕ: да, этот ответ является неправильным - исходное предположение было неправильным. VB's 'С' больше похож на новые инициализаторы объекта C#:
var yourVariable = new yourObject { param1 = 20, param2 = "some string" };
Хотя C# не имеет никакого прямого эквивалента для общего случая, синтаксиса инициализатора объекта усиления C# 3 для вызовов конструктора:
var foo = new Foo { Property1 = value1, Property2 = value2, etc };
Видят главу 8 C# подробно для получения дополнительной информации - можно загрузить его бесплатно от веб-сайт Manning .
(Правовая оговорка - да, это находится в моих интересах получить книгу в руки большего количества людей. Но эй, это - бесплатная глава, которая дает Вам больше информации о связанной теме...)
Вы могли использовать шаблон аккумулятора аргумента.
Большая дискуссия об этом здесь:
http://blogs.msdn.com/csharpfaq/archive/2004/03/11/87817.aspx
О 3/4 ниже на страницу в" Используя Объекты " раздел:
VB:
With hero
.Name = "SpamMan"
.PowerLevel = 3
End With
C#:
//No "With" construct
hero.Name = "SpamMan";
hero.PowerLevel = 3;
Это - то, что должен сказать Визуальный диспетчер программ C#: , Почему не делает C#, имеют 'с' оператором?
Многие люди, включая разработчиков языка C#, полагают, что 'с' часто удобочитаемостью вреда, и больше проклятия, чем благословение. Это более ясно объявить локальную переменную с понятным именем и использование, что переменная для выполнения нескольких операций на отдельном объекте, чем он должна иметь блок со своего рода неявным контекстом.
As the Visual C# Program Manager linked above says, there are limited situations where the With statement is more efficient, the example he gives when it is being used as a shorthand to repeatedly access a complex expression.
Using an extension method and generics you can create something that is vaguely equivalent to a With statement, by adding something like this:
public static T With<T>(this T item, Action<T> action)
{
action(item);
return item;
}
Taking a simple example of how it could be used, using lambda syntax you can then use it to change something like this:
updateRoleFamily.RoleFamilyDescription = roleFamilyDescription;
updateRoleFamily.RoleFamilyCode = roleFamilyCode;
To this:
updateRoleFamily.With(rf =>
{
rf.RoleFamilyDescription = roleFamilyDescription;
rf.RoleFamilyCode = roleFamilyCode;
});
On an example like this, the only advantage is perhaps a nicer layout, but with a more complex reference and more properties, it could well give you more readable code.