When rendering a visualforce page as a PDF, the filename of the PDF (by default) is the name of the page which may be annoying at times. Annoying as every time the file is generated, it will be generated with same name and will lead to cause confusion with the user. If opened multiple times, files will be saved as invoice.pdf, invoice.pdf, invoice.pdf … and so on. Ideally you should be able to define the name of the generated PDF but that’s not something well documented anywhere.
To rescue (as always) comes Salesforce blogs/forums .
In order to set filename for generated PDF you need to set the Content-Disposition header. In constructor of the Visualforce controller use below code:
Apexpages.currentPage().getHeaders().put('content-disposition', 'attachment; filename=AccountReport.pdf');//In case you want to download pdf
Apexpages.currentPage().getHeaders().put('content-disposition', 'inline; filename=AccountReport.pdf');//In case you want to open pdf in browser
Please Note : If you want to make the file name dynamic you will need to refer to several RFCs on how to correctly encode the filename. E.g. if it contains spaces it will need to be quoted. If there are non-ASCII characters or it is longer than 78 characters it needs to be Hex encoded (RFC 2184).